[ios]为什么不是调试器知道方法生成我core data管理对象类的?(附加的代码)

发布时间: 2017/3/27 19:05:44
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

为什么不是调试器知道方法生成我core data管理对象类的?(附加的代码)所以︰

  • 我有 XCode 生成托管调用 WEView 的core data对象类
  • 我注意到调试器似乎没有意识到它的方法吗?
  • 在控制台输出中看到下面。 但初始"大埔 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) 

标题-由 Xcode

@interface WEView : NSManagedObject {
@private
}
@property (nonatomic, retain) NSString * title;
@property (nonatomic, retain) id weStartDayTime;
@property (nonatomic, retain) id weEndDayTime;

@end

解决方法 1:

这就是因为那里真的是没有埃法尔命名标题和还没有 getter 或 setter 的对子。这就是为什么还使用 @dynamic 和不 @synthesize 。当你访问如。标题,这将是这样的事情在现实生活中︰

[myObject valueForKey:@"title"];

同样,设置标题是这样的事情︰

[myObject setValue:foo forKey:@"title"];

所以基本上是 NSManagedObject 只是包装数据库中获取数据或访问从缓存中,但你永远不会将访问对象的一些真实高德 (你可以尝试运行时函数来确定 NSManagedObject 子类的高德)。

如果你仍然想要使用 [self.view title] ,您需要覆盖它。下面是一个示例︰

- (NSString *)title
{
   NSString *value;
   [self willAccessValueForKey:@"title"];
   value = [self primitiveValueForKey:@"title"];
   [self didAccessValueForKey:@"title"];

   return value;
}

当然,这不是原子的 getter 和其慢比正常的方式,但嘿,它工作。

赞助商