2016-07-28 10 views
0

CoreDataから非同期データを準備するコードを書いています。 CoreData:エラー:NULL _cd_rawDataオブジェクトがフォールトに変わっていません。Swift、GCD、CoreDataエラー:エラー:NULL _cd_rawDataオブジェクトがフォールトに変わっていません

ここで私のコードは次のとおりです。コアデータからのオブジェクトであり、エラーをスローします。

func getObject(forKey: String, answer: (Bool, NSObject?) ->()) { 
    let pMOC = initPrivateMOC() 
    pMOC.performBlock({ 
     let fetchRequest = NSFetchRequest() 

     let entityDescription = NSEntityDescription.entityForName("CacheObject", inManagedObjectContext: pMOC) 

     fetchRequest.entity = entityDescription 
     fetchRequest.predicate = NSPredicate(format: "identifier == %@", forKey) 


     do { 
      let result = try self.managedObjectContext?.executeFetchRequest(fetchRequest) as! [CacheObject] 
      var answerObject:NSObject? 
      if !result.isEmpty { 
       if let coObject = result[0].object { 
        if let retrievedObject = NSKeyedUnarchiver.unarchiveObjectWithData(coObject) as? NSObject { 
         answerObject = retrievedObject 
        } 
       } 
      } 
      answer(true, answerObject) 
     } catch { 
      answer(false, nil) 
      fatalError("[CacheManager:getObject] -> Fehler beim Lesen von Daten") 
     } 
    }) 
} 

if let coObject = result[0].objectでエラーが発生します。ここではプライベートMOCを得るための関数である:

init() { 
    let coreDataHandler = CoreDataHandler(identifier: "MK.SimpleCacheStore", ressource: "SimpleCache") 
    self.managedObjectContext = coreDataHandler.getMOC() 

} 

func initPrivateMOC() -> NSManagedObjectContext { 
    let pMOC = NSManagedObjectContext(concurrencyType: .PrivateQueueConcurrencyType) 
    pMOC.parentContext = self.managedObjectContext 

    return pMOC 
} 

も要求に対してによってアクセスされますその上クラスからの呼び出し:

public func get(forKey: String, answer: (Bool, NSObject?) ->()) { 
    if let cam = cacheManager { 
     if let cachedObj = cam.getObjectFromCache(forKey) { 
      print("[SCManager:get] -> Objekt aus NSCache geladen") 
      answer(true, cachedObj) 
     } else { 
      if let cdm = coreDataManger { 
       dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0), { 
        cdm.getObject(forKey, answer: { 
         success, data in 
         //Enable Entry in NSCache 
         if let cdData = data { 
          cam.saveObjectToCache(forKey, object: cdData) 
          print("[SCManager:get] -> Objekt nach nicht auffinden gecacht") 
         } 
         print("[SCManager:get] -> Objekt nicht in NSCache, deshalb aus CoreData") 
         answer(success, data) 
        }) 
       }) 
      } 
     } 
} 

あなたが問題を知っているか、またはいずれかのバグや問題を見つけてください私がGCDとCoreDataを実装したやり方では、ヒントが非常に役に立つでしょう。

答えて

0

問題が見つかりました。自分のリクエストにプライベートMOCを追加していません。だから解決策を使用することですpMOCfetchRequest()

関連する問題