相关疑难解决方法(0)

NSPersistentContainer并发用于保存到核心数据

我已经阅读了一些博客,但我仍然对如何使用NSPersistentContainer performBackgroundTask创建实体并保存它感到困惑.通过调用方便的方法创建一个实例后init(context moc: NSManagedObjectContext)performBackgroundTask() { (moc) in }块,如果我检查container.viewContext.hasChanges这个返回false,并说没有什么保存的,如果我叫节省moc(该块所产生的背景MOC)我得到的错误是这样的:

fatal error: Failure to save context: Error Domain=NSCocoaErrorDomain Code=133020 "Could not merge changes." UserInfo={conflictList=(
    "NSMergeConflict (0x17466c500) for NSManagedObject (0x1702cd3c0) with objectID '0xd000000000100000 <x-coredata://3EE6E11B-1901-47B5-9931-3C95D6513974/Currency/p4>' with oldVersion = 1 and newVersion = 2 and old cached row = {id = 2; ... }fatal error: Failure to save context: Error Domain=NSCocoaErrorDomain Code=133020 "Could not merge changes." UserInfo={conflictList=(
    "NSMergeConflict (0x170664b80) for NSManagedObject (0x1742cb980) with objectID '0xd000000000100000 <x-coredata://3EE6E11B-1901-47B5-9931-3C95D6513974/Currency/p4>' …
Run Code Online (Sandbox Code Playgroud)

concurrency core-data ios swift

9
推荐指数
1
解决办法
4572
查看次数

Core Data在没有明显原因的情况下恢复到以前的状态

基于Core Data的iOS应用程序的一些客户报告他们偶尔会丢失数据.这些报道非常奇怪,这就是我要求你对此采取行动的原因.客户报告说,当他们在一段时间(几分钟,几小时或第二天)之后重新打开应用程序时,他们的一些数据会丢失,就像底层数据库恢复到以前的状态一样.

我已经使用Core Data多年了,之前从未遇到类似这样的问题.应用程序非常简单,这意味着我只使用一个托管对象上下文,并在应用程序进入后台之前提交更改.

我意识到这是一个长镜头,但是这可能是导致此类问题的一些潜在原因,或者我可以通过哪些检查来收集更多信息?不幸的是,我无法自己重现这个问题,这将使这一切变得更加容易.

更新:

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
    if (_persistentStoreCoordinator) return _persistentStoreCoordinator;

    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"Prime.sqlite"];

    NSError *error = nil;
    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];

    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:@{ NSMigratePersistentStoresAutomaticallyOption : @YES, NSInferMappingModelAutomaticallyOption : @YES } error:&error]) {
        // Error Handling
    }

    return _persistentStoreCoordinator;
}
Run Code Online (Sandbox Code Playgroud)

core-data ios

6
推荐指数
1
解决办法
256
查看次数

Core Data何时刷新到磁盘?

我在我的应用程序中使用Core Data,并发现了模拟器的一些奇怪的行为:当我在我的应用程序中向Core Data添加一些数据并使用XCode中的"stop"按钮退出模拟器时(或者只是按下Cmd-Q),下次启动模拟器时,数据不会存储在数据库中.经过一些测试,我发现数据存储到磁盘:

  • 如果我按下主页按钮立即.(差不多-这可能的退出应用程序之前,数据存储,如果退出非常快.)
  • 如果我在添加数据后让应用程序运行一段时间(至少约20秒).

调用[NSManagedObjectContext save:]无效.行为是一样的.

所以我的问题是:这种行为的原因是什么?在退出之前有没有办法强制刷新到磁盘?当在设备上运行时,我是否有以这种方式丢失数据的风险(个人而言,我没有看到任何,除了强制关闭,但奇怪的行为困扰我一点)

core-data objective-c ios5

4
推荐指数
2
解决办法
3346
查看次数

标签 统计

core-data ×3

ios ×2

concurrency ×1

ios5 ×1

objective-c ×1

swift ×1