- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个 iPhone 应用程序,它从 XML 文件读取数据,将它们转换为核心数据托管对象并保存它们。
该应用程序主要在包含约 150 个对象的较小数据集/XML 上运行良好。我之所以这么说,主要是因为 10% 的情况下,我在尝试保存上下文时会从 CoreData 收到以下异常:
* 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“* -_referenceData64 仅为抽象类定义。定义 -[NSTemporaryObjectID_default _referenceData64]!'
在更大的数据集(~2000)上,这种情况每次都会发生,但不是在同一个地方。它可能会在第 137 条记录、第 580 条记录或最后一条记录上失败。我尝试过移动保存点(每个对象,每 10 个对象,在所有对象都分配/初始化后保存),但我总是遇到上面的异常。
我在 Google 上搜索了该异常(exception)情况,发现有人遇到了相同的问题,但没有看到任何解决方案。
我的下一步是简化托管对象和关系,直到该错误停止并从那里开始构建以隔离问题。最后的手段是放弃 Core Data,直接存储到 sqllite 中。
感谢您的帮助!
最佳答案
我也有同样的问题。它适用于较小的数据集,但对于较大的数据集,我收到“_referenceData64 仅为抽象类定义”错误。我的模型中没有抽象实体。
编辑:
我想我已经解决了这个问题。我的问题是我的线程困惑。以下是我修复该问题所遵循的指南:
NSManagedObjectID *objectID = [foo objectID];<br/>
FooClass *newFoo = [(FooClass*)[threadManagedObjectContext objectWithID:objectID] retain]
`
- (void)onFinishParsing {
// lock the store we share with main thread's context
[persistentStoreCoordinator lock];
// save any changes, observe it so we can trigger merge with the actual context
@try {
[threadManagedObjectContext processPendingChanges];
}
@catch (NSException * e) {
DLog(@"%@", [e description]);
[persistentStoreCoordinator unlock];
}
@finally {
// pass
}
NSNotificationCenter *dnc = [NSNotificationCenter defaultCenter];
[dnc addObserver:self selector:@selector(threadControllerContextDidSave:) name:NSManagedObjectContextDidSaveNotification object:threadManagedObjectContext];
@try {
NSError *error;
if (![threadManagedObjectContext save:&error]) {
DLog(@"%@", [error localizedDescription]);
[persistentStoreCoordinator unlock];
[self performSelectorOnMainThread:@selector(handleSaveError:) withObject:nil waitUntilDone:NO];
}
} @catch (NSException *e) {
DLog(@"%@", [e description]);
[persistentStoreCoordinator unlock];
} @finally {
// pass
}
[dnc removeObserver:self name:NSManagedObjectContextDidSaveNotification object:threadManagedObjectContext];
[self performSelectorOnMainThread:@selector(parserFinished:) withObject:nil waitUntilDone:NO];
}
// Merging changes causes the fetched results controller to update its results
- (void)threadControllerContextDidSave:(NSNotification*)saveNotification {
// need to unlock before we let main thread merge
[persistentStoreCoordinator unlock];
[self performSelectorOnMainThread:@selector(mergeToMainContext:) withObject:saveNotification waitUntilDone:YES];
}
- (void)mergeToMainContext:(NSNotification*)saveNotification {
NSError *error;
[managedObjectContext mergeChangesFromContextDidSaveNotification:saveNotification];
if (![managedObjectContext save:&error]) {
DLog(@"%@", [error localizedDescription]);
[self handleSaveError:nil];
}
}
`
关于iphone - 来自 Core Data : NSInvalidArgumentException, 的隐秘错误原因:referenceData64 仅为抽象类定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2009399/
我是一名优秀的程序员,十分优秀!