Coredata - &ndquo; NSObjectInaccessibleException - CoreData无法完成故障”
我是核心数据的新手,仍在搞清楚螺母和螺栓,这个错误一直困扰着我几个小时,我似乎无法找到解决方案。任何帮助是极大的赞赏。
问题是这样的
我有两个视图从服务器获取数据并更新UI。我已经用这种方式建立了流程
view1 - >从服务器发送HTTP请求 - 接收回调 - >将数据保存到Coredata - >从核心数据读取并在UI上显示(回调和保存/读取Coredata发生在ViewController中)
view2 - >从服务器发送HTTP请求 - 接收回调 - >将数据保存到Coredata - >从核心数据读取并在UI上显示(回调和保存/读取Coredata发生在ViewController中)
视图2每3秒重复此过程,因为这是一个自动刷新屏幕。
问题是每当我尝试快速切换视图1和2时,它会因上述错误而崩溃应用程序。如果我在每个视图上等待几秒钟(等待从服务器获取数据),它可以正常工作。我做错了什么,我需要修改什么?
- (void) refreshData {
[super refreshData];
[[UserDataFactory sharedSingleton] refreshLoggedInUserDataAndRespondTo:self user:self.user];
}
- (BOOL) refreshDataCallback:(QExtendedHTTPOperation*)responseOperation {
[self saveToCoreData: responseOperation.responseArray];
NSMutableArray *tmp = [[NSMutableArray alloc] initWithArray:[self readFromCoreData]];
[self setData: tmp];
[tmp release];
[self.tableView reloadData];
return YES;
}
- (void) saveToCoreData:(NSArray *) responseArray{
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"CoreView1" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
[fetchRequest setReturnsObjectsAsFaults:NO];
NSError *error;
NSArray *items = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
[fetchRequest release];
for (NSManagedObject *managedObject in items) {
[self.managedObjectContext deleteObject:managedObject];
}
for (int i=0; i<[responseArray count]; i++) {
CoreView1 *coreView1_ = [NSEntityDescription insertNewObjectForEntityForName:@"CoreView1" inManagedObjectContext:self.managedObjectContext];
coreView_.id = [[responseArray objectAtIndex:i] id];
[self.managedObjectContext insertObject:coreView1_];
}
[self saveContext:self.managedObjectContext];
}
- (NSArray *) readFromCoreData{
NSEntityDescription *entity = [NSEntityDescription entityForName:@"CoreView1" inManagedObjectContext:self.managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:entity];
[fetchRequest setReturnsObjectsAsFaults:NO];
NSError *error;
NSMutableArray *fetchedObjects = [[self.managedObjectContext executeFetchRequest:fetchRequest error:&error] mutableCopy];
[fetchRequest release];
return [fetchedObjects autorelease];
}
这是我正在使用的示例代码,即使View2具有相同的回调并遵循相同的流程。
编辑1
忘了提到这个,我总是在saveToCoreData方法中得到错误。此外,还有一点需要注意的是,如果我删除代码以删除对象,它一切正常(我需要在保存更新的数据之前从表中删除所有现有数据)。不知道发生了什么事。
没有找到相关结果
已邀请:
4 个回复
辅奈
和/或
通知,并使用商店中最新版本的数据更新您的观看次数。此时,您应该丢弃视图所持有的任何Core Data对象,并从商店重新加载它们。
提孺局缎
纫合峭
挂帘妈乡
至