Core Data保存无法识别的选择器异常

时间:2012-08-24 20:05:15

标签: iphone objective-c ios core-data

这是一个很长的镜头,因为谷歌搜索完全没有返回任何内容。有时,往往足够值得进一步调查,但往往不足以追踪何时或如何发生,我在save:上致电NSManagedObjectContext时会遇到以下异常:

-[_NSObjectID_48_0 _stateFlags]: unrecognized selector sent to instance 0x8675570

上下文是类型为NSPrivateQueueConcurrencyType的子上下文,它是类型为NSMainQueueConcurrencyType的主上下文的子项。

除了堆栈跟踪之外,我真的没有任何其他信息: enter image description here

任何密码学家都可以从堆栈跟踪中做出任何想法,以便想出可能出现问题的一些想法吗?

3 个答案:

答案 0 :(得分:6)

我们遇到了同样的问题。它是由对NSManagedObjectContext :: reset的调用引起的。重置使属于调用重置的上下文的所有NSManagedObject失效。继续使用已失效的NSManagedObject实例可能会导致意外结果。这是意想不到的结果之一。

答案 1 :(得分:3)

日志消息表明由于某种原因,我们在_stateFlags上寻找属性/方法_NSObjectID_48_0,其中一个是私有API,另一个是私有类。

快速运行

class-dump /System/Library/Frameworks/CoreData.framework/Versions/A/CoreData

似乎表明(在其他地方)_stateFlagsNSManagedObject上的私有API。我在Mac上找不到任何名为_NSObjectID_48_0的私有类的引用,但仅基于名称它似乎与NSManagedObjectID相关。

这是一个很长的镜头,但我想知道你是否在某个时候通过了NSManagedObjectID,而NSManagedObject的预期呢? grep你的代码明确强制到NSManagedObject是不会有害的。

另一个罪魁祸首可能是将NSManagedObjectIDs插入一个弱类型的数据结构(我正在看你的字典/数组/集),这可能会让你“强制”到NSManagedObject而不是明确它。

答案 2 :(得分:0)

我今年在WWDC上与Xcode工程师讨论了同样的问题。当您在调试器中获得此异常时,您无法告知有关该对象的任何信息。但是如果你看一下Console应用程序中的崩溃日志,他们就会有一个无法响应选择器的对象[我认为我做对了]。

你需要在不运行调试器的情况下让应用程序崩溃 - 因此系统会处理崩溃。

同步手机。

打开控制台〜/ Library / Logs / CrashReporter / MobileDevice /,找到崩溃报告,然后查看报告。有人告诉我输入一个错误 - 这个lldb应该提供相同级别的细节 - 我做了!

希望这会对你有所帮助。

相关问题