代码之家  ›  专栏  ›  技术社区  ›  Maihan Nijat

为什么NSManagedObjectContext在扩展时返回null?

  •  0
  • Maihan Nijat  · 技术社区  · 8 年前

    NSManagedObjectContext 并从中实例化一个对象,如下所示:

    extension NSManagedObjectContext {
        func persist(block: @escaping ()->Void) {
            perform {
                block()
    
                do {
                    try self.save()
                } catch {
                    self.rollback()
                }
            }
        }
    }
    

    在控制器中:

    var managedObjectContext: NSManagedObjectContext?
    func saveFamilyMember(withName name: String) {
        guard let moc = managedObjectContext
            else { return }
    
        moc.persist {
            let familyMember = FamilyMember(context: moc)
            familyMember.name = name
            print("xxxxxxxx")
        }
    }
    

    guard let moc 它会打印,但不会在之后打印。它不会返回任何错误,因为它已安全展开,但不起作用。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Tom Harrington    8 年前

    你有这样一行:

    var managedObjectContext: NSManagedObjectContext?
    

    但正如你在评论中提到的那样,你从不赋值。结果是零。你没有安全地打开它--你的 guard 检查失败了,所以你永远无法通过检查 persist 呼叫没有什么可以打开的,但是 警卫

    创建托管对象上下文取决于应用程序的设置方式以及代码需要在何处/何时执行。在最新版本的iOS中,您通常使用 NSPersistentContainer viewContext 属性,该属性对UI相关代码有用,或者可以为服务器通信或其他后台工作创建后台上下文。您可能想要其中一个,但哪一个取决于调用此代码的位置/时间。

    只需初始化一个,如下所示 NSManagedObjectContext() .]