2016-11-25 8 views
0

シェアエクステンションを作成しました。この拡張機能を使用して、CoreDataに新しい項目を挿入しようとしています。コードは以下の通りです。変数コンテキストおよび文書が作成されます。 context.save()は失敗しません。メイン/ホストアプリケーションを使用してCoreDataに挿入すると、うまく機能し、UIに表示されます。シェアエクステンションのCoreDataにアイテムが記録されていません

共有拡張のすべての挿入がメインアプリではなく別の場所に保存されていることに気づいたもう1つのことは、これらの項目は、メインのCoreDataにマージされていないようです。

なぜCoreDataにアイテムを挿入するとShare拡張機能がメインのCoreDataにマージされないのですか?

let context = CoreDataStackManager.sharedManager.persistentContainer.viewContext 
let document = SGDocument(context: context) 
document.name = "Document Name" 
do { 
    try context.save() 
} catch { 
    fatalError("Unresolved error \(error)") 
} 

PS:Hereは似質問ですが、答えのありません。

+0

アプリと拡張機能の間でデータを共有できるようにアプリグループを設定しましたか? –

+0

はい。私のアプリと拡張機能は同じグループに属しています。 – Ramis

+0

共有拡張の変更は、アプリを強制終了して再起動した後にメインアプリに表示されますか? – Marco83

答えて

0

解決策が見つかりました。

// In the extension I am setting that VC needs to be updated/refreshed. 
UserDefaults.group.set(true, forKey: .udRefreshDocumentsVC) 

// In the view controller adding listener for application will enter foreground. 
NotificationCenter.default.addObserver(forName: .UIApplicationWillEnterForeground, object: nil, queue: nil, using: applicationWillEnterForeground) 

// In the applicationWillEnterForeground method do reload. 
    func applicationWillEnterForeground(notification: Notification) { 
     if UserDefaults.group.bool(forKey: .udRefreshDocumentsVC) { 
      _fetchedResultsController = nil 
      tableView.reloadData() 
      UserDefaults.group.set(false, forKey: .udRefreshDocumentsVC) 
     } 
    } 
関連する問題