gpt4 book ai didi

保存前创建对象的 iOS 模式?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:07:15 27 4
gpt4 key购买 nike

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

一些信息:

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

来自 rails 背景,我习惯于做以下事情:

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

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

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

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

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

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

最佳答案

它实际上按照您描述的 Rails 工作方式工作:新对象在您提交之前不会保存到持久存储中(通过 NSManagedObjectContextsave: 方法)。

参见 Creating and Deleting Managed Objects sectionCore Data Programming Guide .摘录...

Simply creating a managed object does not cause it to be saved to a persistent store. The managed object context acts as a scratchpad. You can create and register objects with it, make changes to the objects, and undo and redo changes as you wish. If you make changes to managed objects associated with a given context, those changes remain local to that context until you commit the changes by sending the context a save: message. At that point—provided that there are no validation errors—the changes are committed to the store.

关于保存前创建对象的 iOS 模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10966852/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com