使用AlertView并立即在Cell中保存核心数据

时间:2012-08-06 20:58:19

标签: ios core-data

当我按下一个单元格时,会弹出一个带提示符的AlertView。我的问题:我想在提示符下显示输入的文本到选定的单元格。 (同时将文本保存到Core Data)。任何人都可以把我推向正确的方向吗?

1 个答案:

答案 0 :(得分: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消息,该方法几乎立即返回,实际保存将在后台线程中进行。

您的应用中的其他任何代码(保存调用除外)都不应该更改。

在您的情况下,在您发出警报之前,请致电保存,并在显示警报时进行保存。