Iphone 具有动态特性的点表示法
我有以下用于核心数据存储的类Iphone 具有动态特性的点表示法,iphone,objective-c,ipad,Iphone,Objective C,Ipad,我有以下用于核心数据存储的类 @interface CVMessage : NSManagedObject { NSString * message; } @property (nonatomic, retain) NSNumber * date_created; @property (nonatomic, retain) NSString * message; @property (nonatomic, retain) NSNumber * mid; @property (nonat
@interface CVMessage : NSManagedObject {
NSString * message;
}
@property (nonatomic, retain) NSNumber * date_created;
@property (nonatomic, retain) NSString * message;
@property (nonatomic, retain) NSNumber * mid;
@property (nonatomic, retain) CVLogin * creator;
@property (nonatomic, retain) NSSet * stars;
@property (nonatomic, retain) NSSet * embeds;
@property (nonatomic, retain) CVTopic * topic;
@property (nonatomic, assign) BOOL options;
@end
@implementation CVMessage
@synthesize options;
@dynamic message;
@dynamic mid;
@dynamic creator;
@dynamic date_created;
@dynamic embeds;
@dynamic stars;
@dynamic topic;
我希望能够做到以下几点:
CVMessage*mes=[CVMessage new];
mes.message=@“一些文本”
我的直觉是,我必须为此实现自己的setter,因此我:
-(void)setMessage:(NSString *) newMessage
{
if (self.message != newMessage)
{
[self.message release];
[newMessage retain];
self.message = newMessage;
}
}
当我运行它时,这会给我一个错误。我遗漏了什么吗?
self.message=newMessage
与[self-setMessage:newMessage]
相同,因此可能会出现无限递归,错误可能是堆栈溢出
只需直接访问变量:
-(void)setMessage:(NSString *) newMessage
{
if (self.message != newMessage)
{
[message release];
message = [newMessage retain];
}
}
self.message=newMessage
与[self-setMessage:newMessage]
相同,因此您可能在那里得到无限递归,并且错误可能是堆栈溢出
只需直接访问变量:
-(void)setMessage:(NSString *) newMessage
{
if (self.message != newMessage)
{
[message release];
message = [newMessage retain];
}
}
我也要这么说。还有一件事:我认为通常应该复制NSString属性,而不是保留。我一开始尝试过,但出现了错误:未能调用NSManagedObject类“CVMessage”-[CVMessage message]上指定的初始值设定项:发送到实例0xdb405a0的未识别选择器***由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[CVMessage message]:第一次抛出时发送到实例0xdb405a0的未识别选择器'***调用堆栈:就生成的代码而言,这两个方法表达式Emilio之间没有区别。
self.message=
确实使用了setMessage:
,但是您可以通过message=
或self->message=
直接访问ivar。有人想对我在实现上述功能时遇到的错误发表评论吗?我也会这么说。还有一件事:我认为通常应该复制NSString属性,而不是保留。我一开始尝试过,但出现了错误:未能调用NSManagedObject类“CVMessage”-[CVMessage message]上指定的初始值设定项:发送到实例0xdb405a0的未识别选择器***由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[CVMessage message]:第一次抛出时发送到实例0xdb405a0的未识别选择器'***调用堆栈:就生成的代码而言,两个方法表达式Emilio之间没有区别。self.message=
确实使用了setMessage:
,但您可以通过message=
或self->message=
直接访问ivar。有人对我在实现上述操作时遇到的错误发表评论吗?