Iphone NSManagedObject中的Setter选择性失败

Iphone NSManagedObject中的Setter选择性失败,iphone,objective-c,ios,setter,Iphone,Objective C,Ios,Setter,我有一个NSManagedObject,我正试图用给定的值实例化它。我访问setter的方式如下: object.couchID = (NSString *)[dictObject objectForKey:@"_id"]; …这在我的机器上运行正常,但我的搭档在他的机器上运行时会出现以下错误: '-[NSCFString type]: unrecognized selector sent to instance 0x4e465e0' someManagedObject.couchID =

我有一个NSManagedObject,我正试图用给定的值实例化它。我访问setter的方式如下:

object.couchID = (NSString *)[dictObject objectForKey:@"_id"];
…这在我的机器上运行正常,但我的搭档在他的机器上运行时会出现以下错误:

'-[NSCFString type]: unrecognized selector sent to instance 0x4e465e0'
someManagedObject.couchID = @"some hardcoded string";
大约90%的setter(所有setter的格式都相同)在我的合作伙伴的机器上工作,但有10%的setter会因该错误而失败。他们都在我的机器上工作

我们正在运行完全相同的代码(根据SVN(是的,我知道)),并从同一台服务器获取相同的数据,所以一切看起来都应该正常工作

我们已经检查了正在传递的对象,它们是相同的。注释掉setter可以让代码进入下一个麻烦的setter,但是我们当然需要它来实际工作。我们还应该如何排除故障?提前谢谢


更新1:解锁了那枚风滚草徽章。。。我猜它太粘了,摸不着?欢迎任何想法或猜测。嘿,你可以赚50分*



更新2:喜忧参半的好消息是,从源代码管理检查新版本会在我的机器上导致相同的问题,因此a)这肯定是代码中的某些内容,b)我可以更积极地进行故障排除。感谢您到目前为止提出的所有建议,我将再次讨论它们。

您可能需要创建一个临时变量,其值为
object
强制转换为实际的类,例如

MyClass *c = (MyClass *)object; // if object is in fact a MyClass instance
c.couchID = (NSString *)[dictObject objectForKey:@"_id"];

我曾经看到过这样的情况:编译器无法进行思维跳跃,无法意识到您的属性就是您知道的类。在这些情况下,我的解决方案是更加明确。这有意义吗?至少值得一试,不是吗?:-)

您可能需要创建一个临时变量,其值为
object
强制转换为实际的类,例如

MyClass *c = (MyClass *)object; // if object is in fact a MyClass instance
c.couchID = (NSString *)[dictObject objectForKey:@"_id"];

我曾经看到过这样的情况:编译器无法进行思维跳跃,无法意识到您的属性就是您知道的类。在这些情况下,我的解决方案是更加明确。这有意义吗?至少值得一试,不是吗?:-)

如果此代码在合作伙伴的机器上失败:

'-[NSCFString type]: unrecognized selector sent to instance 0x4e465e0'
someManagedObject.couchID = @"some hardcoded string";

似乎您有一个悬而未决的指针:当您尝试调用-setCouchID方法时,我会检查someManagedObject是否被正确保留并且仍然是有效的对象

如果此代码在合作伙伴的机器上失败:

'-[NSCFString type]: unrecognized selector sent to instance 0x4e465e0'
someManagedObject.couchID = @"some hardcoded string";

似乎您有一个悬而未决的指针:当您尝试调用-setCouchID方法时,我会检查someManagedObject是否被正确保留并且仍然是有效的对象

在尝试使用NSManagedObjects中的数据绘制CATiledLayer时,我遇到了几乎相同的问题。什么样的有效对象会出现“无法识别的选择器”异常

这几乎总是发生的,因为在您试图设置或获取属性的点之外的对象上没有保留。在一个单独的线程似乎也有关系

在尝试使用[NSManagedObjectContext lock]绕过此问题并保留新线程中的上下文后,我最终将获取的内容放入一个可变集合,以尝试并保持对它的控制,这似乎在iOS上有效,但在OSX上效果不太好

所以有两种可能性

  • 你这样做不是主要的吗 螺纹,主运行中心是否有固定螺栓 在这条线内。检查文件 对于[NSManagedObjectContext锁]。但本质上,处理上下文的每个线程都需要在上下文中保留自己的线程
  • 试着把它扔进一个容器里 当你给它做手术的时候。让它成为一个 有点粘。如果那样听起来很抱歉 像伏都教,但它是

在尝试使用NSManagedObjects中的数据绘制CATiledLayer时,我遇到了几乎相同的问题。什么样的有效对象会出现“无法识别的选择器”异常

这几乎总是发生的,因为在您试图设置或获取属性的点之外的对象上没有保留。在一个单独的线程似乎也有关系

在尝试使用[NSManagedObjectContext lock]绕过此问题并保留新线程中的上下文后,我最终将获取的内容放入一个可变集合,以尝试并保持对它的控制,这似乎在iOS上有效,但在OSX上效果不太好

所以有两种可能性

  • 你这样做不是主要的吗 螺纹,主运行中心是否有固定螺栓 在这条线内。检查文件 对于[NSManagedObjectContext锁]。但本质上,处理上下文的每个线程都需要在上下文中保留自己的线程
  • 试着把它扔进一个容器里 当你给它做手术的时候。让它成为一个 有点粘。如果那样听起来很抱歉 像伏都教,但它是

前几天我在工作中遇到了类似的事情。我怀疑你们中的一个人在应用程序包中有一个过时的.momd文件,并且在升级时没有被替换。我怀疑这是Xcode 4中的一个bug,尽管我还没有完全验证它。如果您的合作伙伴完全删除了应用程序,然后安装了应用程序,那么错误会消失吗?

前几天我在工作中遇到了类似的情况。我怀疑你们中的一个人在应用程序包中有一个过时的.momd文件,并且在升级时没有被替换。我怀疑这是Xcode 4中的一个bug,尽管我还没有完全验证它。如果您的合作伙伴完全删除应用程序,然后安装应用程序,错误是否会消失?

@Dan:出于调试目的,如果您将object.couchID设置为硬编码字符串,则在您的合作伙伴计算机上是否会失败。。。。或者对于其他NSManagedObject参数也是一样?@Damien硬编码字符串也有同样的问题。@你们两个只在模拟器中运行这段代码吗?你们使用什么版本的XCode和SDK?如果没有更多的代码就很难说了。这看起来像是内存管理问题。另外,您是否在一个类中定义了名为
-type
的属性?通常,应该避免给已经存在的属性命名