2012-06-22 45 views
0

我已经经历了几个类似的问题走了,但能达到这个明确的点...在哪里保存核心数据上下文...?

我想节省applicationWillTerminate背景:应该是足够的,但会使得对核心数据便笺增加太多的变化我的应用程序的记忆......?

我应该多保存一次..?我知道,一遍又一遍地保存上下文会减少设备的闪存驱动器的寿命,并且苹果建议我们不要经常这样做。

是否有任何其他应用程序忘记核心数据上下文appart从哪里终止?...?

感谢您的输入..

+1

取决于客户因失败或意外情况而丢失所有数据时会有多愤怒。当您的应用程序被暂停时,您将不会收到终止消息。所以如果它在这个状态下被杀死,poof就会获得所有的数据。除非你的应用程序不支持后台模式,否则终止很少被调用。 – borrrden

+0

所以我应该在applicationWillEnterBackground中保存我的上下文,谢谢你的输入。 –

+0

http://stackoverflow.com/questions/10887437/objective-c-core-data-saving-approach –

回答

0

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

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

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

最后一句话:对于给定的商店,您可以拥有多个对象上下文。你可以有孩子的比赛。因此,您可以保存部分数据而不是完全变更待办事项,您可以优先考虑某些实体的优先级别......许多实现选择和可能的策略,但它们应该由用户界面和交互设计驱动。他们必须。

保存时对用户有意义。

-1

这是一种方式将数据存储到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"); 
     } 
} 
+0

你不明白我的问题..我知道如何保存数据...请仔细阅读。像每次单独添加新电子邮件一样保存它会损坏设备的硬盘驱动器。 –