iphone - 为什么调试器不知道我的 Core Data 生成的托管对象类上的方法? (附代码)

标签 iphone xcode ios core-data

为什么调试器不知道我的 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/

相关文章:

ios - iPhone 6 Plus 无法识别过滤器 : blur() Css

iphone - 更改 uitableviewcell 的宽度

ios - Xcode:安装框架时链接器命令错误

ios - 如何检测是否正在为 Swift 中的设备或模拟器构建应用程序

iphone - UIApplication sharedApplication - keyWindow 为零?

iphone - 具有水效果的 UIView

iphone - 从字符串中删除 Html 格式

ios - Xcode 7.3 中的自动布局 (swift 2)

iphone - 在ScrollView中旋转缩放ImageView?

ios - 系统不显示推送通知