2010-03-04 32 views
9

我有一个应用程序,它使用核心数据(大约4000个对象(实体))下载/解析大型XML文件并存储信息。 XML在不同的线程中加载/解析,该线程具有自己的NSManagedObjectContext。iPhone核心数据问题:仅为抽象类定义的referenceData64

当试图将实体保存到持久性存储,我有时会收到以下错误(约20%)

2010-03-03 23:保存异常在XML 41:42.802 XXX [4203 7487]
2010-03-03 23:41:42.802 xxx [7487:4203]说明:* -_referenceData64仅针对抽象类定义。定义 - [NSTemporaryObjectID_default _referenceData64]!
2010-03-03 23:41:42.803 XXX [7487:4203]名称:NSInvalidArgumentException
2010-03-03 23:41:42.804 XXX [7487:4203]的UserInfo:(空)
2010-03- 03 23:41:42.805 xxx [7487:4203]原因:*
-_referenceData64仅针对抽象类定义。定义 - [NSTemporaryObjectID_default _referenceData64]!

我有一个简单的整数来跟踪应用程序创建的实体与NSManagedObjectContext中的insertedObjects属性进行比较,然后保存,当我得到错误时,这些数字不匹配,NSManagedObjectContext中的insertedObjects缺少约10实体。

我不知道我应该如何继续调查这个问题,任何人有任何想法如何解决这个问题?

感谢 /奥斯卡

回答

5

我曾与核心数据和多线程操作同样的问题。 阅读此article了解问题。

在工作线程中我开始使用函数锁定,解锁用于NSManagedObjectContext并且崩溃不再重复。

+0

子目录做不正确初始化等可能会出现此问题*子类=(子类别*)[self.managedObjectContext objectWithID:currentSubcategory.objectID]。 这解决了我的问题。 – 3lvis

+5

文章链接已损坏。 – ericg

+0

您的解决方案适用于我。就我个人而言,我使用块迭代ALAssetsLibrary。每块内部我都写了CD。我将块内​​容封装在@syncrhonized(中),现在它工作的很好。谢谢! – VaporwareWolf

1

你的实体是否使用了自定义的NSManagedObject子类?如果您在initWithEntity:insertIntoManagedObjectContext: