在我的应用程序中,我使用 CoreData 来保存数据,并且我正在从服务器推送和拉取数据。我还使用同一个帐户跨多个设备同步数据。
但最近,我从 crashLytics 报告中得到了这个崩溃。
This NSPersistentStoreCoordinator has no persistent stores. It cannot perform a save operation
所以在我下面的函数中,我以这种方式调用“saveContext”方法。
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
//Creating a new instance of an managed object.
Entity *cycle = [NSEntityDescription insertNewObjectForEntityForName:@"Entity" inManagedObjectContext:appDelegate.managedObjectContext];
[cycle setEmailID:m_emailId];
[cycle setStartDate:dateFromServer];
[cycle setEndDate:dateFromServer];
[appDelegate saveContext];
}
//appDelegate.m
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (_persistentStoreCoordinator != nil)
{
return _persistentStoreCoordinator;
}
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"LoveCycles.sqlite"];
NSError *error = nil;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error])
{
*/
//NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
//abort();
}
return _persistentStoreCoordinator;
}
- (void)saveContext
{
NSError *error = nil;
NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
if (managedObjectContext != nil)
{
if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error])
{
*/
// NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
//abort();
}
}
}
创建 ManagedObject 上下文 (MOC)
- (NSManagedObjectContext *)managedObjectContext
{
if (_managedObjectContext != nil)
{
return _managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil)
{
_managedObjectContext = [[NSManagedObjectContext alloc] init];
[_managedObjectContext setPersistentStoreCoordinator:coordinator];
}
return _managedObjectContext;
}
所以我几乎没有怀疑。
1)我应该"[appDelegate saveContext]"
每次都调用,数据是从服务器接收的,还是应该只在应用程序退出时保存。
2) CrashLytics 报告指向"[appDelegate saveContext]"
. 这也发生在 iOS 9 上。
3)我无法在运行 iOS 9 的设备上复制此问题。因此不了解用户是否真的看到了此崩溃,以及此错误的后果是什么。