0

当我推送一个单元格时,会弹出一个带有提示的 AlertView。我的问题:我想将提示中输入的文本显示到选定的单元格中。(同时将文本保存到 Core Data)。谁能把我推向正确的方向?

4

1 回答 1

0

如果您希望它在警报显示的同时发生,您需要在后台线程中进行保存。

最简单的方法是使用嵌套上下文,并且只是从主上下文中保存。

无论您在何处创建托管对象上下文,请将 alloc/init 部分替换为...

NSManagedObjectContext *parentMoc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
parentMoc.persistentStoreCoordinator = persistentStoreCoordinator;
self.managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
self.managedObjectContext.parentContext = parenetMoc;

现在,您拥有与之前相同的 MOC,除了它是一个主队列 MOC,其父上下文在后台队列中运行。

不过,您将不得不使用一种方法来保存这两个上下文。父级上的第二次保存发生在后台线程中,因此您不必等待。

- (void)saveData {
    NSError *error = nil;
    NSManagedObjectContext *moc = self.managedObjectContext;
    if ([moc save:&error]) {
        moc = moc.parentContext;
        [moc performBlock:^{
            NSError *error = nil;
            if (![moc save:&error]) {
                // Handle the actual save error
            }
        }];
    } else {
        // Handle the error of saving up into the parent context...
    }
}

现在,不再直接调用 [managedObjectContext save:&error],而是将其替换为 saveData 的消息,该方法将几乎立即返回,并且实际的保存将在后台线程中进行。

您的应用程序中的任何其他代码(除了保存调用)都不需要更改。

在您的情况下,就在您抛出警报之前,调用保存,并且在显示警报时会发生保存。

于 2012-08-06T22:02:00.003 回答