在哪里保存核心数据上下文...?

Posted

技术标签:

【中文标题】在哪里保存核心数据上下文...?【英文标题】:Where to save the core data context...? 【发布时间】:2012-06-22 09:27:27 【问题描述】:

我已经经历了几个类似的问题,但可以对此达成明确的观点......

我认为将上下文保存在applicationWillTerminate: 中应该足够了,但是在核心数据暂存器上进行太多更改会增加我的应用程序的内存...?

我应该更频繁地保存它吗..?我知道一遍又一遍地保存上下文会减少设备闪存驱动器的寿命,苹果建议我们应该减少这样做。

是否存在应用程序忘记核心数据上下文 appart 的其他情况...?

感谢您的意见..

【问题讨论】:

取决于您的客户在我猜由于崩溃或某些意外情况而丢失所有数据时的愤怒程度。当您的应用程序暂停时,您也不会收到终止消息。因此,如果它在该状态下被杀死,那么所有数据都会消失。除非您的应用程序不支持后台模式,否则很少会调用 terminate。 所以我也应该将我的上下文保存在 applicationWillEnterBackground 中,感谢您的输入。 ***.com/questions/10887437/… 【参考方案1】:

您的应用程序的保存行为取决于...取决于应用程序。我的意思是,在基于文档的应用程序中,用户希望在点击 cmd-S 时保存文档。所以你应该这样做。越来越多的用户希望他们使用的应用程序能够自动保存。

从用户的角度来看,保存行为是一种设计选择。用户界面和交互设计决定了应用程序的行为方式。

除了这些考虑之外,技术现实当然也不容忽视。内存使用、崩溃错误和数据丢失、撤消管理、电池消耗,所有这些都会对应用程序行为和最终用户产生影响。我真的不认为 SSD 的预期寿命是您应该考虑的因素。

最后一句话:对于给定的商店,您可以拥有多个对象上下文。您可以有子上下文。因此,您可以保存部分数据而不是完整的变更积压,您可以将某些实体优先于其他实体......许多实现选择和可能的策略,但它们应该由用户界面和交互设计驱动。他们必须这样做。

在对用户有意义时保存。

【讨论】:

【参考方案2】:

这是一种将数据存储到 Coredata 的方式。

-(void) setEmailContactsToCoredata:(id)sender  
    

        NSManagedObjectContext *context=[appDelegate managedObjectContext];

        NSManagedObject *newData = [NSEntityDescription insertNewObjectForEntityForName:@"EmailContacts" inManagedObjectContext:context];

        [newData setValue:self.emailTextField.text forKey:@"email_ID"];



        NSError *error;

       if (![context save:&error])
       
            NSLog(@"There was an error while inserting Data into coredata");
       
       else
       
           NSLog(@"Success fully Saved your email id");  
         

【讨论】:

你没有理解我的问题..我知道如何保存数据......请仔细阅读..像每次添加新电子邮件时一样保存它会损坏硬盘设备的驱动器。

以上是关于在哪里保存核心数据上下文...?的主要内容,如果未能解决你的问题,请参考以下文章

在稍后阶段保存上下文 - 保存指向上下文的指针?核心数据

崩溃前保存核心数据上下文

如何在保存到核心数据之前验证上下文中的值

在核心数据中保存到托管对象上下文时的 SIGABRT

核心数据父/子上下文保存失败

核心数据上下文不保存