Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 为什么不是';调试器不知道我的核心数据生成的托管对象类上的方法吗?(附代码)_Iphone_Xcode_Ios_Core Data - Fatal编程技术网

Iphone 为什么不是';调试器不知道我的核心数据生成的托管对象类上的方法吗?(附代码)

Iphone 为什么不是';调试器不知道我的核心数据生成的托管对象类上的方法吗?(附代码),iphone,xcode,ios,core-data,Iphone,Xcode,Ios,Core Data,为什么调试器不知道核心数据生成的托管对象类上的方法?(附代码)因此: 我有一个XCode生成的托管核心数据对象类,名为WEView 我注意到调试器似乎不知道它的方法 请参见控制台输出中的以下内容。最初的“po self.weView”似乎可以工作,但是当引用任何对象实例变量时就不行了 控制台输出 (gdb) po self.weView <WEView: 0x4f6a3f0> (entity: WEView; id: 0x4f68710 <x-coredata://CB3E

为什么调试器不知道核心数据生成的托管对象类上的方法?(附代码)因此:

  • 我有一个XCode生成的托管核心数据对象类,名为WEView
  • 我注意到调试器似乎不知道它的方法
  • 请参见控制台输出中的以下内容。最初的“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) 

这是因为实际上没有ivar命名的标题,也没有getter或setter对。这也是为什么要使用
@dynamic
而不是
@synthesis
。当您访问例如title时,实际上是这样的:

[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;
}

当然,这不是一个原子getter,它比正常的方式慢,但是,嘿,它可以工作。

哦-好的-任何重新调试的建议-大多数人只是保持现状并了解情况,还是有一些调整可能有助于调试?我猜是前者,但我想我会问…哦,我确实读到有人推荐“mogenerator”而不是XCode的代码生成器,但我猜它可能会产生相同类型的代码?他已经给了你调试的字符串-只需说“po[myObject valueForKey:@“title”]”或者在你的例子中是“po[self.weView valueForKey:@“title””yep理解这一点-他询问了类中的一些调整,以便可以使用“po self.weView.title”@Greg:您可以“覆盖”访问器/设置器来设置值/读取它。我用一个例子更新了答案。
- (NSString *)title
{
   NSString *value;
   [self willAccessValueForKey:@"title"];
   value = [self primitiveValueForKey:@"title"];
   [self didAccessValueForKey:@"title"];

   return value;
}