objective-c – EXC_BAD_ACCESS在初始化时在自定义类上设置属性?

objective-c – EXC_BAD_ACCESS在初始化时在自定义类上设置属性?,第1张

概述我有一个简单的Answer类,如下所示: @interface Answer : NSObject { NSString *_text; NSNumber *_votes;}@property(nonatomic, retain) NSString *text;@property(nonatomic, retain) NSNumber *votes;+(id)initFromA 我有一个简单的Answer类,如下所示:

@interface Answer : NSObject {  Nsstring *_text;  NSNumber *_Votes;}@property(nonatomic,retain) Nsstring *text;@property(nonatomic,retain) NSNumber *Votes;+(ID)initFromAnswerData:(NSSet *)data;-(ID)initWithText:(Nsstring *)answer;@end

实现如下:

#import "Answer.h"#import "AnswerData.h"#import "AppDelegate.h"@implementation Answer@synthesize text = _text;@synthesize Votes = _Votes;-(ID)initWithText:(Nsstring *)answer {  if( (self=[super init])) {    _text = answer;    _Votes = 0;  }  return self;}@end

如果我使用initWithText:方法在视图控制器中创建一个Answers数组,当我在数组中取一个Answer并尝试找到它的文本值时,我不可避免地会出现EXC_BAD_ACCESS错误.

但是,如果我初始化一个新的答案,设置文本值,然后将其添加到数组我没有此访问问题.

所以这会导致问题:

[arrayOfAnswers addobject:[[Answer alloc] initWithText:@"Hello"]];

但这不是:

Answer *newAnswer = [[Answer alloc] initWithText:nil];newAnswer.text = @"Hello";[arrayOfAnswers addobject:newAnswer];

有谁能解释为什么?

解决方法 你直接使用属性_text和_Votes但不是他们的setter.
因此,您没有保留该行的输入参数答案

_text = answer;

你应该改为

_text = [answer retain];

要么

self.text = answer;
总结

以上是内存溢出为你收集整理的objective-c – EXC_BAD_ACCESS在初始化时在自定义类上设置属性?全部内容,希望文章能够帮你解决objective-c – EXC_BAD_ACCESS在初始化时在自定义类上设置属性?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1019157.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存