在使用Core Data

时间:2016-09-06 13:48:11

标签: ios swift core-data swift3 ensembles

所以我一直在更新我的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在迁移时更新了函数头。

更新:

所以显然以下是零值

enter image description here

但我不确定自Swift 3迁移以来导致这种情况的原因

1 个答案:

答案 0 :(得分:1)

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

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

我创建了一个新项目并使用了以下代码

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

它有效。这是因为未调用以下内容因此未设置核心数据堆栈

self.setupCoreData()