在我的應用程序中,我使用CoreData來保存數據,並且我正在從服務器推送和提取數據。我還使用同一帳戶在多個設備上同步數據。NSPersistentStoreCoordinator沒有持久性存儲。它不能執行保存操作(iOS 9)
但是最近,我從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複製此問題。因此,無法理解用戶是否真的看到了這個崩潰,以及這會導致什麼後果?錯誤。
錯誤是告訴你的是,managedObjectContext有沒有與之相關的持久化存儲。您可能需要取消註釋錯誤處理代碼,因爲您對persistentStoreCoordinator {}的調用可能失敗。 –
嘿@DuncanGroenewald,我的代碼是否正確? – Ranjit
@DuncanGroenewald,我取消註釋並嘗試。但沒有崩潰。 – Ranjit