用于在保存之前创建对象的iOS模式?

时间:2012-06-10 06:45:04

标签: ios cocoa core-data

我是iOS的新手,我目前正在为我的应用设计“创建新活动”页面。

一些信息:

  1. 用户可以单击创建新事件,然后按返回取消创建此新事件。 (我正在使用UINavigationController)
  2. 1个视频可以附加到特定事件。
  3. 用户可以创建新事件,录制视频,然后决定不继续保存(通过按回)
  4. 每个事件都必须生成一个uuid。需要此uuid来防止不同客户端之间的实体冲突,从而创建事件并将其提交给服务器。
  5. 捕获的每个视频都被命名为 uuid .mov,用于在事件上传到服务器之前存储到文件系统中。
  6. 来自铁路背景,我习惯于做以下事情:

    1. 当用户单击“创建新事件页面”时,会创建一个事件但不会保存到数据库。
    2. 然后,用户将属性输入到页面并决定他/她是否要提交
    3. 当提交发生时,事件将归因于提供的信息。然后保存该事件。
    4. 但是,我不认为Core Data有一个API允许开发人员在不保存的情况下创建实体。目前,我正在做这样的事情:

      1. 当用户访问“创建新事件页面”时,会创建一个空对象并将其存储到数据库中。对事件实例的引用将传递给创建新事件页面的Controller。
      2. 当用户输入所有信息并拍摄视频(uuid在awakeFromInsert创建并在1期间设置)时,保存仅仅是设置具有所需属性的实体。
      3. 如果用户决定取消创建活动,我正在检查是否按下了取消。如果是,则删除事件和视频文件。
      4. 检查是否按下取消的代码。

        - (void)viewWillDisappear:(BOOL)animated {
            [super viewWillDisappear:animated];
            if (![[self.navigationController viewControllers] containsObject:self]) {
        

        说实话这有点复杂。你们有更好的建议吗?

1 个答案:

答案 0 :(得分:3)

它实际上就像你描述的Rails一样工作:在你提交它们之前,新对象不会保存到持久存储中(通过NSManagedObjectContext的{​​{1}}方法)。

查看Creating and Deleting Managed Objects sectionCore Data Programming Guide。摘录...

  

简单地创建托管对象不会导致它被保存到   持久存储。托管对象上下文充当暂存器。您   可以用它创建和注册对象,对对象进行更改,   并根据需要进行撤消和重做更改。如果您对托管进行了更改   与给定上下文关联的对象,这些更改保持在本地   在您通过发送上下文a提交更改之前的上下文   保存:消息。那时 - 只要没有验证   错误 - 更改将提交给商店。