从URI表示创建NSManagedObject时iOs5:NSInvalidArgumentException

时间:2011-11-03 16:15:03

标签: iphone ios5 nsmanagedobject

我刚刚安装了iOs5,几乎所有人都出人意料地流利 - 但现在我有一个奇怪的问题:

我的应用程序将 NSManagedObjects 的对象ID写入文本文件,然后再次读取它们并从持久性存储中重新实例化相应的对象。它在更新之前工作正常,现在我打电话

[persistentStoreCoordinator managedObjectIdForURIRepresentation:[NSURL URLWithString:objectIdString]]

我得到 NSInvalidArgumentException - 指定的URI不在正确的方案中

Google搜索无效参数异常的具体原因完全没有提供任何内容,而对象ID正是对

的调用

[[objectId URIRepresentation]absoluteString]

回报。根据Apple文档,对 managedObjectIdForURIRepresentation 的调用甚至不应该引发 NSInvalidArgumentException ,而只是在出现错误时返回 nil ...

1 个答案:

答案 0 :(得分:1)

好的,我自己找到了。

对于有类似问题的任何人:主要问题不是managedObjectIdForURIRepresentation调用,而是来自objectIdString - 尽管函数调用IMHO不应该抛出InvalidArgumentException,因为它没有在文档中声明。

实际问题更奇怪: objectIdString 来自我通过使用调用我的应用程序的URL方案获得的URL

(BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url

功能。单击的URL方案条目具有正确的格式,如

appname://x-coredata://objectid

但是:我在 handleOpenURL 功能中真正做到的是:

appname://x-coredata//objectid

显然错过了一个重要的细节:x-coredata之后的冒号!!! 这导致了崩溃......看起来像handleOpenURL中的一个bug给了我......

无论如何,现在的解决方法是查看是否缺少此冒号,然后添加它 - 一切正常。要向Apple提交错误报告。