+ entityForName:nil间歇性地发生

时间:2017-05-25 03:52:28

标签: ios xcode core-data

我有一个使用核心数据的项目,这个错误会间歇性地发生。我知道实体在那里是因为大部分时间,应用程序打开并显示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];

2 个答案:

答案 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堆栈   更多参与。

https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/InitializingtheCoreDataStack.html

事实证明,即使我实施了:

NSFetchRequest *fetchRequest = [MessageLists fetchRequest];
NSError *error;
NSLog(@"All Records is %@",[context executeFetchRequest:fetchRequest error:&error]);

我仍然会遇到同样的问题。此外,自iOS 8以来,我还没有更新AppDelegate的核心数据代码...