3

我对 iOS 很陌生,目前正在为我的应用程序设计“创建新事件”页面。

一些信息:

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

来自 rails 背景,我习惯于执行以下操作:

  1. 当用户单击“创建新事件页面”时,会创建一个事件但不会保存到数据库中。
  2. 然后用户在页面中输入属性并决定他/她是否要提交
  3. 当提交发生时,该事件被赋予所提供的信息。然后保存该事件。

但是,我不相信 Core Data 有一个 API 允许开发人员创建一个实体而不保存它。目前,我正在做这样的事情:

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

检查是否按下取消的代码。

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

老实说,这有点复杂。大家有更好的建议吗?

4

1 回答 1

3

它实际上像您描述的 Rails 工作那样工作:新对象在您提交它们之前不会保存到持久存储中(通过NSManagedObjectContext'ssave:方法)。

请参阅核心数据编程指南创建和删除托管对象部分。摘录...

简单地创建一个托管对象不会导致它被保存到持久存储中。托管对象上下文充当暂存器。您可以使用它创建和注册对象,对对象进行更改,以及根据需要撤消和重做更改。如果您对与给定上下文关联的托管对象进行更改,这些更改将保持在该上下文的本地,直到您通过向上下文发送 save: 消息来提交更改。此时——假设没有验证错误——更改将提交到存储区。

于 2012-06-10T07:42:19.913 回答