NSNotification观察者 - NSManagedObjectContextDidSave

时间:2015-07-15 21:08:33

标签: ios objective-c swift core-data nsnotificationcenter

嗨,我希望有人可以帮我解决这个问题。当用户首次登录我的应用程序时,将进行API调用,该调用将在Web服务器上的数据库中获取该用户的现有数据。当他们第一次登录(如果成功)时,我会转到另一个视图控制器,该控制器显示一个进度指示器,当下载的数据完全保存到Core Data时停止动画,然后segue到应用程序的主vc(用户可以开始使用应用程序)。

我宁愿拥有一个实时指标,比如每次将项目保存到核心数据时都会更新当前下载项目的实时指标,但在这种情况下,我别无选择,只能使用NSNotificationCenter监听从API下载的每个项目何时保存到核心数据。到目前为止,我有:

override func viewDidAppear(animated: Bool) {
   super.viewDidAppear(true)
   NSNotificationCenter.defaultCenter().addObserver(self,   selector:"contextDidSave:", name: NSManagedObjectContextDidSaveNotification, object:nil)
} 

func contextDidSave(notification: NSNotification) {
  if notification.name == NSManagedObjectContextDidSaveNotification {
    var c = CoreMessage.getMessages(self.moc, ascending:true).count
    //the println works - i see the updated count
    println(c)
    //this doesnt work, the lbl does not get updated
    self.labelCount.text = "\(c)"
  }
}

我也尝试像这样更新标签:

dispatch_async(dispatch_get_main_queue(), { () -> Void in
  self.labelCount.text = "\(c)"
})

有人可以说明我可能做错了吗?

1 个答案:

答案 0 :(得分:0)

这里有几件事。

  1. 您很可能遇到线程问题。打开CurrencyDebug标志并确认。这将影响UI的用途。
  2. 你不想在这里取一个。首先,你的提取会减慢导入速度。更糟糕的是,您已经拥有了汇总它所需的数据。
  3. 注意:您还需要使用字符串比较的if。

    您收到的通知包含-userInfo字典。在该字典中有三个集合对象,表示在引用的保存中插入,更新和删除的内容。您可以而且应该只是查询这些集合以查看已更改的内容并从那里更新您的用户界面。