我刚刚安装了iOs5,几乎所有的操作都非常流畅——但是现在我有一个奇怪的问题:
My App将NSManagedObjects的对象id写入一个文本文件,然后再次读取它们,并从持久存储中重新实例化相应的对象。它在更新之前工作得很好,现在当我调用
时 [persistentStoreCoordinator managedObjectIdForURIRepresentation:[NSURL URLWithString:objectIdString]]
我得到一个NSInvalidArgumentException -指定的URI不是在正确的方案
搜索无效参数异常的具体原因,根本得不到任何结果,对象id正是对
的调用。 [[objectId URIRepresentation]absoluteString]
的回报。根据apple文档,调用 managedobjecdforurirepresentation 甚至不应该引发NSInvalidArgumentException,而只是返回nil以防出现错误…
好的,我自己找到的
对于任何有类似问题的人:主要问题不是managedobjecdforurirepresentation调用,而是进来的objectIdString -尽管InvalidArgumentException不应该由函数调用抛出,因为它没有在文档中说明。
实际的问题甚至更奇怪: objecdstring 来自一个URL,我使用一个URL方案,调用我的应用程序的
(BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url
函数。被单击的URL方案条目具有正确的格式,如
appname://x-coredata://objectid
BUT:我在handleOpenURL函数中真正得到的是:
appname://x-coredata//objectid
显然是遗漏了一个重要的细节:x-coredata后面的冒号!!这就是导致崩溃的原因…对我来说似乎是handleOpenURL中的一个bug…
无论如何,现在的解决方法是看看这个冒号是否缺失,然后添加它-然后一切都很好。要向苹果公司提交bug报告