2016-09-06 7 views
0

Swift 3.0用のコードを更新していて、アプリケーションが開いたときにiCloudと同期してフェッチ要求を実行します。Core Dataでオプションの値をアンラッピングしている間に予期せぬことにnilが見つかりました

私は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) 
       } 
      } 
     } 
} 

に次の関数を実行し、次の

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

のためのオプションのエラーを取得するしかし、私は、オプションのエラーは、Xcodeの更新機能何のためにあるのかわかりません移行時のヘッダー。

はUPDATE:だから私は、エラーことがわかったので、どうやら次

にnil値

enter image description here

を持っているしかし、私はスウィフト3移行

+1

xCodeにすべての威力のブレークポイントを置き、エラーがどこにあるのかを教えてください。 –

+0

@PavelGatilov質問を更新しました。 –

+0

の移行時に何が変わったのかをもう一度確認しようとしていますが、どこがクラッシュするのでしょうか? –

答えて

1

ので、これを引き起こしているものをわかりませんよデリゲートのdidFinishLaunchingWithOptions関数のためです。関数が正しく移行されませんでした。

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

私は新しいプロジェクトを作成し、代わりに次の

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

を使用し、それが働きました。これは、以下のコードが呼び出されていないため、私のコアデータスタックが設定されていないためです。

self.setupCoreData() 
+0

アップルのテンプレートで提案されている(自動)遅延初期化コアデータスタックを使用しないのはなぜですか? – vadian

関連する問題