2016-01-22 54 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() 
     } 
    } 
相关问题