Gre*_*reg 3 iphone xcode core-data ios
为什么调试器不知道我的Core Data生成的托管对象类上的方法?(附上代码)所以:
控制台输出
(gdb) po self.weView
<WEView: 0x4f6a3f0> (entity: WEView; id: 0x4f68710 <x-coredata://CB3E1660-4BA8-4700-ADDB-A32CD44D56B6/WEView/p3> ; data: {
title = "Weekend Items";
weEndDayTime = "(...not nil..)";
weStartDayTime = "(...not nil..)";
})
(gdb) po self.weView.title
There is no member named title.
(gdb) po [self.weView title]
Target does not respond to this message selector.
(gdb)
Run Code Online (Sandbox Code Playgroud)
标题 - 由Xcode生成
@interface WEView : NSManagedObject {
@private
}
@property (nonatomic, retain) NSString * title;
@property (nonatomic, retain) id weStartDayTime;
@property (nonatomic, retain) id weEndDayTime;
@end
Run Code Online (Sandbox Code Playgroud)
那是因为确实没有名为title的ivar,也没有getter或者setter对.这也是你使用@dynamic和不使用的原因@synthesize.当你访问例如.标题,这将是现实中的这样的事情:
[myObject valueForKey:@"title"];
Run Code Online (Sandbox Code Playgroud)
同样,设置标题是这样的:
[myObject setValue:foo forKey:@"title"];
Run Code Online (Sandbox Code Playgroud)
所以基本上NSManagedObject只是数据库提取或缓存访问的包装器,但是你永远不会访问对象的一些真正的ivars(你可以尝试运行时函数来确定NSManagedObject子类的ivars).
如果您仍想使用[self.view title],则需要覆盖它.这是一个例子:
- (NSString *)title
{
NSString *value;
[self willAccessValueForKey:@"title"];
value = [self primitiveValueForKey:@"title"];
[self didAccessValueForKey:@"title"];
return value;
}
Run Code Online (Sandbox Code Playgroud)
当然,这不是一个原子吸气剂,它比正常方式慢,但嘿,它的工作原理.
| 归档时间: |
|
| 查看次数: |
707 次 |
| 最近记录: |