0

这是一个很长的镜头,因为谷歌搜索绝对没有返回任何内容。有时,通常在值得进一步调查的地方,但在我可以追踪它何时或如何发生的地方不够频繁,当我调用save:a时,我得到以下异常NSManagedObjectContext

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

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

除了堆栈跟踪之外,我真的没有任何其他信息: 在此处输入图像描述

任何密码学家都可以从堆栈跟踪中做出任何事情来想出一些关于问题可能是什么的可能想法吗?

4

3 回答 3

6

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

于 2012-09-17T20:14:36.127 回答
3

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

快速运行

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

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

这是一个很长的镜头,但我想知道你是否在某个时候通过了NSManagedObjectID一个NSManagedObject预期的地方?将代码 grep 显式强制转换为NSManagedObject.

另一个罪魁祸首可能是将 NSManagedObjectIDs 插入到弱类型数据结构(我正在查看的字典/数组/集合)中,这可能允许您在不明确说明的情况下“强制”到 NSManagedObject。

于 2012-08-25T01:48:54.640 回答
0

我在今年的 WWDC 上与 Xcode 工程师讨论了同样的问题。当您在调试器中获得此异常时,您无法说出有关该对象的任何信息。但是,如果您查看控制台应用程序中的崩溃日志,他们确实有无法响应选择器的对象 [认为我做对了]。

您需要在不运行调试器时让应用程序崩溃 - 这样系统才能处理崩溃。

同步您的手机。

打开控制台~/Library/Logs/CrashReporter/MobileDevice/,找到崩溃报告,查看报告。我被告知要输入一个错误 - lldb 应该提供相同级别的详细信息 - 我做到了!

希望这对您有所帮助。

于 2012-08-24T20:56:43.967 回答