0

所以我一直在为 Swift 3.0 更新我的代码,当应用程序打开时,我与 iCloud 同步并执行一个获取请求。

但是,我收到以下可选错误

let appDelegate = UIApplication.shared.delegate as! AppDelegate
     appDelegate.syncWithCompletion { (completed) -> Void in
}

它在 appDelegate 中执行以下函数

func syncWithCompletion(_ completion:@escaping (_ completed:Bool) -> Void) {

      if !ensemble.isLeeched {
            ensemble.leechPersistentStore { error in
                if error != nil {
                    print("cannot leech \(error!.localizedDescription)")
                    completion(false)
                }
                else {
                    print("leached!!")
                    completion(true)
                }
            }
      }
      else {
            ensemble.merge{ error in
                if error != nil {
                    print("cannot merge \(error!.localizedDescription)")
                    completion(false)
                }
                else {
                    print("merged!!")
                    completion(true)
                    //NSNotificationCenter.defaultCenter().postNotificationName("Updated-DB", object: nil)
                }
           }
      }
}

我不确定可选错误是什么,Xcode 在迁移时更新了函数头。

更新:

所以显然以下有一个零值

在此处输入图像描述

但我不确定自 Swift 3 迁移以来是什么原因造成的

4

1 回答 1

1

所以我发现错误是因为didFinishLaunchingWithOptions委托中的函数。函数未正确迁移。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: Any]?) -> Bool {

我创建了一个新项目并改用以下内容

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

它奏效了。这是因为未调用以下内容,因此未设置我的核心数据堆栈

self.setupCoreData()
于 2016-09-06T14:33:36.390 回答