在处理错误addPersistentStoreWithType(Handling errors in

2019-08-03 19:45发布

我试图寻找关于创建iPhone上的持久存储协调处理时,错误的信息。 我已经实现轻量级迁移

   NSError *error = nil;
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                         [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
                         [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) {
    /*
     Replace this implementation with code to handle the error appropriately.

     abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. 

     Typical reasons for an error here include:
     * The persistent store is not accessible;
     * The schema for the persistent store is incompatible with current managed object model.
     Check the error message to determine what the actual problem was.


     If the persistent store is not accessible, there is typically something wrong with the file path. Often, a file URL is pointing into the application's resources directory instead of a writeable directory.

     If you encounter schema incompatibility errors during development, you can reduce their frequency by:
     * Simply deleting the existing store:
     [[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil]

     * Performing automatic lightweight migration by passing the following dictionary as the options parameter:
     @{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES}

     Lightweight migration will only work for a limited set of schema changes; consult "Core Data Model Versioning and Data Migration Programming Guide" for details.

     */
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    abort();
}    

return _persistentStoreCoordinator;

这是基于苹果的代码与轻量级迁移增加的支持。

我找不到处理错误,如果应用程序仍然会遇到一个错误在这里的任何信息。 在我看来,如果数据库无法创建的应用程序无法使用的。

  • 难道我只是要求用户尝试重新安装应用程序,并显示相关infromation?
  • 我可以保留中止,同时增加了提示有关错误还是将导致苹果拒绝应用()语句?

Answer 1:

调用中止()在这种情况下是毫无疑问的。 任何应用程序,当机将被苹果拒绝。 而且它不会解决问题:重新启动应用程序会发现同样的存储文件,因此再次失败。

出于同样的原因,重新安装应用程序没有帮助,而且这将是一个糟糕的用户体验。

当然,如果迁移已经过测试,应该不会出现这种情况。 但是,如果出现这种致命的错误,你的应用程序无法打开数据库,你必须创建一个新的数据库。

具体步骤采取依靠什么是存储在数据库中,如果/您如何恢复数据。 所以,你可以

  • 删除与旧的数据库文件[[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil] ,或者从你的程序资源复制一个默认的数据库文件storeURL
  • _persistentStoreCoordinator addPersistentStoreWithType:...再次打开新的数据库。
  • 或许再次与数据从服务器填充数据库,或者任何已经工作要做,以重建数据。


文章来源: Handling errors in addPersistentStoreWithType