这是一个很长的镜头,因为谷歌搜索完全没有返回任何内容。有时,往往足够值得进一步调查,但往往不足以追踪何时或如何发生,我在save:
上致电NSManagedObjectContext
时会遇到以下异常:
-[_NSObjectID_48_0 _stateFlags]: unrecognized selector sent to instance 0x8675570
上下文是类型为NSPrivateQueueConcurrencyType
的子上下文,它是类型为NSMainQueueConcurrencyType
的主上下文的子项。
除了堆栈跟踪之外,我真的没有任何其他信息:
任何密码学家都可以从堆栈跟踪中做出任何想法,以便想出可能出现问题的一些想法吗?
答案 0 :(得分:6)
我们遇到了同样的问题。它是由对NSManagedObjectContext :: reset的调用引起的。重置使属于调用重置的上下文的所有NSManagedObject失效。继续使用已失效的NSManagedObject实例可能会导致意外结果。这是意想不到的结果之一。
答案 1 :(得分:3)
日志消息表明由于某种原因,我们在_stateFlags
上寻找属性/方法_NSObjectID_48_0
,其中一个是私有API,另一个是私有类。
快速运行
class-dump /System/Library/Frameworks/CoreData.framework/Versions/A/CoreData
似乎表明(在其他地方)_stateFlags
是NSManagedObject
上的私有API。我在Mac上找不到任何名为_NSObjectID_48_0
的私有类的引用,但仅基于名称它似乎与NSManagedObjectID
相关。
这是一个很长的镜头,但我想知道你是否在某个时候通过了NSManagedObjectID
,而NSManagedObject
的预期呢? grep你的代码明确强制到NSManagedObject
是不会有害的。
另一个罪魁祸首可能是将NSManagedObjectIDs插入一个弱类型的数据结构(我正在看你的字典/数组/集),这可能会让你“强制”到NSManagedObject而不是明确它。
答案 2 :(得分:0)
我今年在WWDC上与Xcode工程师讨论了同样的问题。当您在调试器中获得此异常时,您无法告知有关该对象的任何信息。但是如果你看一下Console应用程序中的崩溃日志,他们就会有一个无法响应选择器的对象[我认为我做对了]。
你需要在不运行调试器的情况下让应用程序崩溃 - 因此系统会处理崩溃。
同步手机。
打开控制台〜/ Library / Logs / CrashReporter / MobileDevice /,找到崩溃报告,然后查看报告。有人告诉我输入一个错误 - 这个lldb应该提供相同级别的细节 - 我做了!
希望这会对你有所帮助。