我有一个使用核心数据的项目,这个错误会间歇性地发生。我知道实体在那里是因为大部分时间,应用程序打开并显示entityName的内容。 1.这发生在应用程序代表中,而不是塞尔维亚 2.当我做[self.managedObjectModel实体]时,entityName就在那里,但app崩溃了 这不是拼错的。 4.它出现在同一个地方,同一时间(应用程序启动)
NSManagedObjectContext *contOBJ = self.managedObjectContext;
NSEntityDescription *entity;
NSString * entityForNameString = @"MessageLists";
@try {
entity = [NSEntityDescription entityForName:entityForNameString
inManagedObjectContext:contOBJ];
}
@catch (NSException* exception) {
NSLog(@"DANGER DANGER - ERROR FOUND");
NSLog(@"Uncaught exception: %@", exception.description);
// ditch effort to reset manageObject BUT DOES NOT WORK...
[self.managedObjectContext reset];
// ditch effort to reset manageObject BUT DOES NOT WORK...
return nil;
NSLog(@"Stack trace: %@", [exception callStackSymbols]);
// Reset the store
}
@finally {
NSLog(@"finally");
}
NSFetchRequest *fetcher = [[NSFetchRequest alloc] init];
// need to define a predicate that will institute weather a message thread is deleted or NOT
[fetcher setEntity:entity];
NSError *error;
NSLog(@"All Records is %@",[contOBJ executeFetchRequest:fetcher error:&error]);
return [contOBJ executeFetchRequest:fetcher error:&error];
答案 0 :(得分:1)
不要使用旧的字符串类型的东西,只需这样做
NSFetchRequest *fetchRequest = [MessageLists fetchRequest];
NSError *error;
NSLog(@"All Records is %@",[context executeFetchRequest:fetchRequest error:&error]);
答案 1 :(得分:0)
我的问题是间歇性的原因不是因为我的代码而是iOS 10的变化。显然,苹果改变了核心数据在AppDelegate中初始化和声明的方式。
从iOS 10和macOS 10.12开始,NSPersistentContainer处理 创建Core Data堆栈并提供对 NSManagedObjectContext以及一些方便的方法。 在iOS 10和macOS 10.12之前,创建了Core Data堆栈 更多参与。
事实证明,即使我实施了:
NSFetchRequest *fetchRequest = [MessageLists fetchRequest];
NSError *error;
NSLog(@"All Records is %@",[context executeFetchRequest:fetchRequest error:&error]);
我仍然会遇到同样的问题。此外,自iOS 8以来,我还没有更新AppDelegate的核心数据代码...