iOS - 核心数据 - 成功创建/打开之前

标签 ios core-data uimanageddocument

概览

我有一个 iOS 项目,在该项目中我将姓名列表存储在 TableView 中。

我理解在打开/创建数据库的那一刻,有一个完成处理程序来执行一个方法。

步骤:

  1. 在我的例子中,第一个屏幕是一个显示名称的表格 View
  2. 有一个 + 按钮(在导航栏上)用于添加新名称,这会将其带到新屏幕以输入详细信息。

关注

我担心的是,如果我在完成处理程序中获取 TableView 的名称,并且如果用户不等待数据库打开并创建一个新名称,在保存它时,数据库可能不会打开/创建。

问题

  1. 如何处理这种情况?
  2. 我错过了什么吗?

最佳答案

真的,在一切都初始化之前,您不应该允许用户更改内容。如果需要一段时间,则只需禁用该功能,直到准备就绪。

在这种情况下很容易。从禁用“添加”按钮开始,然后在完成处理程序中启用它。

您可以编写一个 documentIsReady 方法(它将启用编辑,以及在“一切就绪”时您想要执行的任何其他操作),然后在文档准备好使用时调用它。例如,请参见下面的代码。

    if (![[NSFileManager defaultManager] fileExistsAtPath:[doc.fileURL path]]) {
        [doc saveToURL:doc.fileURL forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success) {
            [self documentIsReady: success];
        }];
    } else if (doc.documentState == UIDocumentStateClosed) {
        [doc openWithCompletionHandler:^(BOOL success) {
            [self documentIsReady: success];
        }];
    } else {
        BOOL success = doc.documentState == UIDocumentStateNormal;
        [self documentIsReady: success];
    }

关于iOS - 核心数据 - 成功创建/打开之前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10150821/

相关文章:

ios - 将 UIGestureRecognizer 初始化为 Swift 中属性定义的一部分?

ios - 在 iOS 中使用多个 UIManagedDocuments 时的任何特殊注意事项

java - Spark 上下文中的 Uima Ruta 内存不足问题

ios - 没有 AppDelegate 的 SwiftUI 远程推送通知(Firebase 云消息传递)

iOS drawRect : is it possible to clear the Graphics Context?

ios - CoreData 或 NSPredicate 是否像 sql 查询一样支持 COLLATE?如果是这样怎么办?

ios - 更改 NSManagedObject 的属性,它会发送通知吗?

ios - UIManagedDocument 中 Core Data 对象的状态保存和恢复策略

ios - Swift 允许扩展除一个以外的所有单元格?

ios - Dispatch.main.async 节中的行数无效