2016-12-13 2 views
1

Xcode 8 및 Swift 2.3을 사용 중이고 일부 핵심 데이터를 영구 저장소에 삽입 할 때 핵심 데이터 문제를 디버깅하려고합니다. 코어 데이터 서적에서 머리 위로 조금 더 배우기내 Xcode 디버깅 세션이 중지되는 이유

이 기능은 기본 데이터를 가져올 필요가 있는지 확인한 후 (필요한 경우) 설정합니다. : 나는 즉시

private let _sharedCDHelper = CDHelper() /* breakpoint 3 */ 
class CDHelper : NSObject { 

// MARK: - SHARED INSTANCE 
class var shared : CDHelper { 
    return _sharedCDHelper /* breakpoint 2 */ 
} 

, 중단 점 3에서 중지 : breakpoint1에서

func checkIfDefaultDataNeedsSetup (url:NSURL, type:String) { 
     if isDefaultDataAlreadySetupForStoreWithURL(url, type: type) == false { 

      if let lift = NSEntityDescription.entityForName("Lift", inManagedObjectContext: CDHelper.shared.context) { /*breakpoint*/ 1 

       // not returning here 
       let newLiftEvent = Lift(entity: lift, insertIntoManagedObjectContext: CDHelper.shared.context) 

       newLiftEvent.uid = 0 
       newLiftEvent.liftName = "Back Squat" 

       CDHelper.saveSharedContext() 

      } else { 
      // skip setup 
      } 
      return 
     } 

그것은 내가 그것을 중단 점 2와 3에서 중지 한 CDHelper.shared.context합니다 (inManagedObjectContext 인수)를 호출 Step into Into를 클릭하십시오 :

enter image description here

나는 CDHelper.shared.context를 얻기 위해 갔던 곳은 중단 한 후 다음 라인으로 돌아갑니다 기대하지만, 그렇지 않습니다. Xcode와 Simulator는 끊어지지 않습니다. 그것은 단지이 시점에 이르며 마치 무언가를 기다리는 것처럼 거기에 머물러 있습니다.

나는이 선택적 바인딩을 추측하고 있습니다. if let lift = NSEntityDescription.entityForName("Lift", inManagedObjectContext: CDHelper.shared.context)은 할당되지 않으므로 메소드에 포함되지 않습니다. 하지만 Lift 엔터티가 managedObjectContext에있을 수 있다는 것은 확실합니다. 내 .xcdatamodeld에서 그것을보고, DB를 SQLite를 사용하여 DB에서 보았습니다. 그리고 심지어 데이터 모델을 삭제하고 다시 만들었습니다. 또한 .MainQueueConcurrencyType 만 사용하고 있음을 확인했습니다.

누구나 볼 수 있거나 찾아야 할 다른 문제가 있습니까? Lift 엔티티가 관리 객체 컨텍스트에 있다고 확신 할 수있는 다른 방법이있을 것 같습니다.

답변

0

나는이 선택 if let lift = NSEntityDescription.entityForName("Lift", inManagedObjectContext: CDHelper.shared.context)를 바인딩

를 할당 받고되지 않는 이유는 추측 같은데요? 모든 중단 점을 제거하거나 비활성화하고 해당 줄에 중단 점을 지정하십시오. 이제 앱을 실행합니다. 우리가 그 중단 점에서 멈 추면, 넘어서십시오. 이제 당신이 어디에 있는지 보도록하십시오.