私のアプリでは、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 を実行しているデバイスでこの問題を再現できません。そのため、ユーザーが実際にこのクラッシュを見ているかどうか、またこのエラーの結果がどうなるかがわかりません。