2016-11-16 86 views
5

我正在開發一個在ios中使用核心數據的應用程序。而且有很多的實體和大量的數據將被保存,這就是爲什麼我使用「私有上下文」方法和塊使用後端線程保存數據。除了一個實體外,所有實體都可以。第一次在實體中沒有保存數據的核心數據

在此實體中,數據不會在應用程序啓動並同步數據時第一次保存,但在此之後,如果再次同步數據,則會保存該實體中的所有數據。這裏是我的保存數據代碼:

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{}