ここで何が起こっているかというと、アプリが を受信したところですNSPersistentStoreDidImportUbiquitousContentChangesNotification
。
- (void)storesDidUpdate:(NSNotification*)note {
FLOG(@"storesDidUpdate ");
[_managedObjectContext mergeChangesFromContextDidSaveNotification:note];
// Refresh user Interface
[[NSNotificationCenter defaultCenter] postNotificationName:@"iProjectCoreDataUpdated"
object:self];
[self updateDetails];
}
そして今、アプリは次のことを行うだけで、テキストの新しいコピーで UITextView を更新しようとしています:
self.detailText.attributedText = [self.detailItem valueForKey:@"scope"];
ここで、detailItem は、iCloud から更新を受け取る前に取得された NSManagedObject です。
textContainer が不平を言っている理由や不平を言っている理由がわかりません。また、完了したという通知を既に受け取っているため、ログのインポートが行われている理由もわかりません。
奇妙なことに、単に reloadData を呼び出すと、他の UITableView が正しく更新されます。
私がここで何か間違っているかどうかについてのアイデアはありますか? textView を更新しようとしないと正常に動作し、ビューを閉じて戻ると正しいデータが得られることに注意してください。
また、アプリを再起動すると、すべてのデータがそこにあり、破損などはありません。実際、iCloud の両側で問題が発生しているにもかかわらず、Core Data ストアに関しては、アプリはほとんどの点で非常に堅牢に見えます!
ああ、reloadFetchedResults は少し誤解を招く可能性があります。それを行う必要がないように思われるためです。そのため、メソッド名は過去の名残りです。私が行っているのは、この呼び出しで UI の値を更新することだけです。
2013-10-09 07:25:53.783 MyApp[4509:510b] OpeningViewController.reloadFetchedResults: 呼び出された 2013-10-09 07:25:53.786 MyApp[4509:510b] InfoDetailViewController.reloadFetchedResults: InfoDetailViewController で呼び出された 2013-10-09 07 :25:53.788 MyApp[4509:510b]* void _UIPerformResizeOfTextViewForTextContainer(NSLayoutManager *, UIView *, NSTextContainer *, NSUInteger)() でのアサーションの失敗、/SourceCache/UIFoundation/UIFoundation-258/UIFoundation/TextSystem/NSLayoutManager_Private.m:1510 2013-10-09 07:25:53.793 MyApp [4509:510b] -_PFUbiquityRecordImportOperation main: CoreData: Ubiquity: Error importing transaction log: transactionLogLocation: : /var/mobile/Library/Mobile Documents/HHHHHHNNNN~com~mycompany~MyApp/CoreData/New Document/duncangroenewald~simAABC628E-9D5E- 58F7-9B8D-0BC724C6D0C8/New Document/W8MckEJ0x2d~HZZIeUH2be6hs41TEOONzKIrCuLcuP4=/6C953E7C-B2AF-47F7-B828-DD062B96415D.1.cdt transactionNumber: 5 、例外: メインスレッドでのみ実行! ユーザー情報: (null) 2013-10-09 07:25:53.803 MyApp[4509:510b] -_PFUbiquityRecordsImporter 操作:failedWithError:: CoreData: ユビキタス: インポート操作でエラーが発生しました: エラー Domain=NSCocoaErrorDomain Code=134060 "The operation could not be completed. (Cocoa error 134060.)" UserInfo=0x16d882c0 {exception=Only run on the main thread!} userInfo: { exception = "Onlyメインスレッドで実行してください!"; }。次の URL でログ ファイルをインポートしようとしています: transactionLogLocation: : /var/mobile/Library/Mobile Documents/HHHHHHNNNN~com~mycompany~MyApp/CoreData/New Document/duncangroenewald~simAABC628E-9D5E-58F7-9B8D-0BC724C6D0C8/New Document/W8MckEJ0x2d~HZZIeUH2be6hs41TEOONzKIrCuLcuP4=/6C953E7C-B2AF-47F7-B828-DD062B96415D.1.cdt transactionNumber: 5 2013-10-09 07:25:53.809 MyApp[4509:510b] * UserInfo=0x16d882c0 {exception=メイン スレッドでのみ実行!} userInfo: { exception = "メイン スレッドでのみ実行!"; }。次の URL でログ ファイルをインポートしようとしています: transactionLogLocation: : /var/mobile/Library/Mobile Documents/HHHHHHNNNN~com~mycompany~MyApp/CoreData/New Document/duncangroenewald~simAABC628E-9D5E-58F7-9B8D-0BC724C6D0C8/New Document/W8MckEJ0x2d~HZZIeUH2be6hs41TEOONzKIrCuLcuP4=/6C953E7C-B2AF-47F7-B828-DD062B96415D.1.cdt transactionNumber: 5 2013-10-09 07:25:53.809 MyApp[4509:510b] * UserInfo=0x16d882c0 {exception=メイン スレッドでのみ実行!} userInfo: { exception = "メイン スレッドでのみ実行!"; }。次の URL でログ ファイルをインポートしようとしています: transactionLogLocation: : /var/mobile/Library/Mobile Documents/HHHHHHNNNN~com~mycompany~MyApp/CoreData/New Document/duncangroenewald~simAABC628E-9D5E-58F7-9B8D-0BC724C6D0C8/New Document/W8MckEJ0x2d~HZZIeUH2be6hs41TEOONzKIrCuLcuP4=/6C953E7C-B2AF-47F7-B828-DD062B96415D.1.cdt transactionNumber: 5 2013-10-09 07:25:53.809 MyApp[4509:510b] *キャッチされていない例外 'NSInternalInconsistencyException' が原因でアプリを終了しています。理由: 'メイン スレッドでのみ実行してください!' *** First throw call stack: (0x2ff23f53 0x3a6996af 0x2ff23e2d 0x308cb1df 0x3796643d 0x37966185 0x3798f7bb 0x379926f7 0x37992759 0x379b378b 0x379b331f 0x379b2f0d 0x3273b05d 0x129717 0x2fee6121 0x2fe5a317 0x3083edcd 0x308436ab 0x118263 0x2fee6121 0x2fe5a317 0x2fd8c69f 0x2fd8cc93 0x2fd813dd 0x3085197b 0x308f5b35 0x3ab83297 0x3ab8309b 0x3ab83d15 0x3ab83f8d 0x3acbedbf 0x3acbec84) libc++abi.dylib: terminatingタイプ NSException のキャッチされない例外あり
編集: ここに、iOS および OSX 用のコア データ/iCloud アプリのサンプルをいくつか投稿しました。これらには、データの読み込み/削除と iCloud 同期のためのバックグラウンド スレッドが含まれています。うまくいけば、ここで説明されている問題に対処できます。http://ossh.com.au/design-and-technology/software-development/sample-library-style-ios-core-data-app-with-icloud-integration/