2016-09-06 10 views
0

그래서 Swift 3.0 용 코드를 업데이트했으며 앱이 열릴 때 iCloud와 동기화하고 가져 오기 요청을 실행합니다.코어 데이터로 옵션 값을 언 래핑하는 동안 예기치 않게 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 
} 

의 선택 오류 그러나 나는 선택 오류, 엑스 코드 업데이트 기능을 위해 무엇인지 확실하지 않다 마이그레이션 할 때 헤더.

는 UPDATE : 그래서 오류 발견 그래서 분명히 다음

은 전무 값

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

Apple 템플릿에 제안 된대로 (자동) 지연 초기화 된 코어 데이터 스택을 사용하지 않는 이유는 무엇입니까? – vadian