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를 클릭하십시오 :
나는 CDHelper.shared.context
를 얻기 위해 갔던 곳은 중단 한 후 다음 라인으로 돌아갑니다 기대하지만, 그렇지 않습니다. Xcode와 Simulator는 끊어지지 않습니다. 그것은 단지이 시점에 이르며 마치 무언가를 기다리는 것처럼 거기에 머물러 있습니다.
나는이 선택적 바인딩을 추측하고 있습니다. if let lift = NSEntityDescription.entityForName("Lift", inManagedObjectContext: CDHelper.shared.context)
은 할당되지 않으므로 메소드에 포함되지 않습니다. 하지만 Lift 엔터티가 managedObjectContext에있을 수 있다는 것은 확실합니다. 내 .xcdatamodeld
에서 그것을보고, DB를 SQLite를 사용하여 DB에서 보았습니다. 그리고 심지어 데이터 모델을 삭제하고 다시 만들었습니다. 또한 .MainQueueConcurrencyType
만 사용하고 있음을 확인했습니다.
누구나 볼 수 있거나 찾아야 할 다른 문제가 있습니까? Lift
엔티티가 관리 객체 컨텍스트에 있다고 확신 할 수있는 다른 방법이있을 것 같습니다.