objective-c – EXC_BAD_ACCESS在初始化时在自定义类上设置属性
发布时间:2020-12-14 17:49:58 所属栏目:百科 来源:网络整理
导读:我有一个简单的Answer类,如下所示: @interface Answer : NSObject { NSString *_text; NSNumber *_votes;}@property(nonatomic,retain) NSString *text;@property(nonatomic,retain) NSNumber *votes;+(id)initFromAnswerData:(NSSet *)data;-(id)initWithT
我有一个简单的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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |