2016-11-16 12 views
5

iosのコアデータを使用してアプリケーションを開発しています。そして、多くのエンティティがあり、多くのデータが保存されるので、なぜ私は "プライベートコンテキスト"アプローチを使用してブロックを使用してバックスレッドにデータを保存しているのですか。 1つを除くすべてのエンティティですべて正常です。コアエンティティに最初にデータを保存していないデータ

このエンティティでは、アプリケーションが起動されてデータが同期されるときにデータが最初に保存されませんが、その後、データを再び同期すると、そのエンティティのすべてのデータが保存されます。ここでは、データを保存するための私のコードは次のとおりです。

let programAttendeeAssignArray:NSArray? = dict["data_assign"] as AnyObject? as? NSArray 
for var paAssignIndex = 0; paAssignIndex < programAttendeeAssignArray?.count; paAssignIndex++ { 
    let programAttendeeAssignObj:NSDictionary? = programAttendeeAssignArray?.objectAtIndex(paAssignIndex) as AnyObject? as? NSDictionary 
    if let paAssignDict = programAttendeeAssignObj as? [String: AnyObject] { 
     var keyString: String = "" 
     if let eID = paAssignDict["id"]! as? Int { 
      keyString = String(eID) 
     } 

     let paAssign: Conf_speakers = Utilities.sharedInstance.getOrCreateObjectOfEntityName("Conf_speakers", key: "id", identifier: keyString, localContext: privateContext) as! Conf_speakers 

     if let eeid = paAssignDict["id"]! as? Int { 
      paAssign.id = String(eeid) 
     } 

     if let attendee_id = paAssignDict["id1"]! as? Int { 
      paAssign.attendee_id = String(attendee_id) 
     } 

     if let agenda_id = paAssignDict["id2"]! as? Int { 
      paAssign.agenda_id = String(agenda_id) 
     } 

     if let updated_at = paAssignDict["id3"]! as? String { 
      paAssign.updated_at = updated_at 
     }      
    } 
} 

let error: NSErrorPointer = nil 
do { 
    try privateContext.save()      
} catch let error1 as NSError { 
    error.memory = error1 
} catch { 
    fatalError() 
} 

dispatch_async(dispatch_get_main_queue(), { 
    appDelegate.managedObjectContext.performBlock {() -> Void in 
     //var fds:Bool 
     do { 
      try 
      print("Result MSG: \(appDelegate.managedObjectContext.save())") 
      // fds = true 
     } catch _ { 
      //fds = false 
     } 
    } 
}) 
+0

あなたは、この特定のエンティティのためのスレッドずに試したことがありますか? – Poles

+0

はい、スレッドなしでデータを保存しています。 –

+0

スレッドコードで共有してください。 – Poles

答えて

0
let appDel : AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
    let context : NSManagedObjectContext = appDel.managedObjectContext 

    let request = NSFetchRequest(entityName: "TableName") 
    request.returnsObjectsAsFaults = false 
    do { 
     var results :NSArray 

     try results = context.executeFetchRequest(request) 
     if results.count == 0 
     { 

     } 
     else{ 

      let managedObject = results[0] 
      managedObject.setValue(text, forKey: "TableEntity") 
      //save data into table 
      try context.save() 


     } 
    } 
    catch{} 
関連する問題