2016-01-22 69 views
0

我正在使用UITableViewCell內嵌的UISWitch更新一些Core Data條目。UISwitch粘在UITableViewCell中

當開關切換時,我需要它來刷新表格,儘管在那一刻UISwitch只停留在它的位置。

我懷疑這是與我使用的模型有關嗎?下面是來自UITableVIewCell的代碼,其中我更新了Core Data條目,然後使用tableview引用,嘗試在表上重新加載數據。 UI不會重新加載,除非我退出視圖並返回,所以我知道Core Data實體正在被正確更新。

我懷疑這是因爲我的surveyQuestionReference總是設置爲相同的值?

class SurveyQuestionTableViewCell: UITableViewCell { 


let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext 

@IBOutlet weak var lblQuestion: UILabel! 

@IBOutlet weak var toggQuestion: UISwitch! 
var surveyQuestionReference : SurveyQuestion? 
var tableViewReference : UITableView? 

@IBAction func toggledQuestion(sender: AnyObject) { 
    let tempContext: NSManagedObjectContext = NSManagedObjectContext(concurrencyType: .PrivateQueueConcurrencyType) 
    tempContext.parentContext = self.managedObjectContext 

    tempContext.performBlock({ 
     let entityName = "CoreDataObject" 
     let request = NSFetchRequest(entityName: entityName) 
     request.predicate = NSPredicate(format: "workId = %@", self.surveyQuestionReference!.workId) 
     do { 

      let results = try tempContext.executeFetchRequest(request) as? [NSManagedObject] 

      if results!.count > 0{ 

        if let moc = self.managedObjectContext{ 
         moc.performBlockAndWait({ 


          [unowned self] in 
          for result in results!{ 
           result.setValue(self.toggQuestion.on, forKey: (self.surveyQuestionReference?.property)!) 
          } 

         }) 





       } 
      } 
      do { 
       try tempContext.save() 

      } catch let error { 
       print(error) 
      } 
     }catch{ 
      print("error") 
     } 

    }) 
    print(sender) 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { 
     // load data 

     dispatch_async(dispatch_get_main_queue()) { 
      // update ui 

      self.tableViewReference!.reloadData() 
     } 
    } 


    } 

回答

0

我解決它通過重新加載表之前設置模型屬性:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { 
     // load data 

     dispatch_async(dispatch_get_main_queue()) { 
      // update ui 
      self.surveyQuestionReference?.answer = self.toggQuestion.on 
      self.tableViewReference!.reloadData() 
     } 
    } 
相關問題