为什么调试器不知道我的 Core Data 生成的托管对象类上的方法? (附加代码)所以:
- 我有一个名为 WEView 的 XCode 生成的托管核心数据对象类
- 我注意到调试器似乎没有意识到它的方法?
- 请参阅下面的控制台输出。最初的“po self.weView”似乎有效,但在引用任何对象实例变量时却无效?
控制台输出
(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)
header - 由 Xcode 生成
@interface WEView : NSManagedObject {
@private
}
@property (nonatomic, retain) NSString * title;
@property (nonatomic, retain) id weStartDayTime;
@property (nonatomic, retain) id weEndDayTime;
@end
最佳答案
那是因为确实没有名为 title 的 ivar,也没有 getter 或 setter 对。这也是您使用 @dynamic
而不是 @synthesize
的原因。当您访问例如。标题,这在现实中将是这样的:
[myObject valueForKey:@"title"];
同样,设置标题是这样的:
[myObject setValue:foo forKey:@"title"];
所以基本上 NSManagedObject 只是一个围绕数据库获取或从缓存访问的包装器,但您永远不会访问该对象的一些真实 ivar(您可以尝试运行时函数来确定 NSManagedObject 子类的 ivar)。
如果你仍然想使用[self.view title]
,你需要覆盖它。这是一个例子:
- (NSString *)title
{
NSString *value;
[self willAccessValueForKey:@"title"];
value = [self primitiveValueForKey:@"title"];
[self didAccessValueForKey:@"title"];
return value;
}
当然这不是原子 setter/getter ,它比正常方式慢,但是嘿,它有效。
关于iphone - 为什么调试器不知道我的 Core Data 生成的托管对象类上的方法? (附代码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5601081/