今日のウィジェットを使用しているアプリがあります。グループを使用してデータを共有しています。現在ウィジェットにデータが正しく表示されています。アプリのデータを変更してウィジェットを表示すると、正しく更新されます。今、ウィジェットの一部のデータを更新し、アプリに反映させたいと思います。今日の拡張機能で変更後のアプリケーションのCoreDataをリフレッシュ
アプリにはUITableView
があるので、NSFetchedResultsController
を使用してテーブルのデータを取得しています。このウィジェットは、fetchedResultsControllerの項目間をスクロールし、データを表示します。ウィジェット上で任意の数のアイテムを更新することが可能です。
これは他のアプリでも行われているため、これを行うことができます。私はちょうど私がウィジェット上のデータを更新したときにそれをリフレッシュできるようにする方法をアプリに知らせる方法を試すことができません。
私が試したことについては、何を試してみるか考えることができなかったためあまりありませんでした。
func controllerDidChangeContent(controller: NSFetchedResultsController) {
print ("Controller changed")
}
このイベントは、アプリケーションのデータを変更すると起動しますが、ウィジェットからデータを変更すると起動しません。以下の提案パー
、私はアプリ上のviewDidLoadに次のコードを追加:通知をキャッチし、その後
let center = NSNotificationCenter.defaultCenter()
center.addObserver(self, selector: #selector(self.contextUpdated(_:)),name: NSManagedObjectContextDidSaveNotification,
object: context)
をそして:
@IBAction func contextUpdated(notification: NSNotification) {
print("Notification recieved")
}
私がやったと私は同じ結果が得られましたcontrollerDidChangeContentイベント - アプリケーションのデータを変更するときに発生しましたが、ウィジェットから何も得られませんでした。私の理解は、ウィジェットとアプリケーションが同じコンテナにないことです。そのため、私は通知を受け取っていません。
私が気づいたもう一つのことは、ウィジェットにデータを保存すると、アプリケーションのmocでデータを保存することができなくなることです。おそらく、ウィジェットのコンテキストがデータを更新し、アプリケーションのコンテキストを無効にしたためでしょうか?
「NSFetchedResultsController」は、mocを保存すると自動的に更新されるはずです。 – oyalhi