問題タブ [uimanageddocument]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
core-data - saveToURL を使用して UIManagedDocument を作成する場合の iOS CoreDataTableViewController テーブル
スタンフォード大学の CoreDataTableViewController を使用して動的テーブルを表示しています。
アプリの仕組み: このテーブルに行を追加するために、データ入力のために子画面がポップされます。子画面が閉じると、新しく作成された managedObject が挿入され、コールバックによってテーブルがリロードされます。
画面に再び入ると、新しく追加された行が断続的にテーブルから欠落していることに気付きました。この動作は、UIManagedDocument オブジェクトが saveToURL を使用して初めて作成されたときにのみ発生することに気付きました。その後、アプリを再起動し、openWithCompletionHandler を使用して UIManagedDocument を開くと、リストは常に正しく表示されます。
UIManagedDocument を作成/開くために使用しているコードは次のとおりです。
上記のコードを実行すると、常に onDocumentDidLoad() が呼び出され、成功フラグは YES になります。
どんな助けでも大歓迎です。前もって感謝します!
-- 次のコードを編集して、Jody に応答してドキュメントを作成し、閉じてから再度開く方法を示しました - それでも同じ問題が発生しました。---
core-data - UIManagedDocument documentState == 5、未定義の状態定数
UIManagedDocument
Core Data を使用しているときに、オブジェクトがdocumentState
5 に等しいことがわかりました。UIDocument
ドキュメントでは、次の定数のみが定義されています。
これは、0、1、2、4、および 8 になります。5 は、をUIManagedDocument
使用する特別な状態である可能性がありますが、どこにも文書化されていません。Core Data スキーマが変更されると、この状態が発生するようです。状態の意味がわかりません。通常、エラー: が表示Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'This NSPersistentStoreCoordinator has no persistent stores. It cannot perform a save operation.'
されます。永続ストアとして使用するには、ドキュメントを通常の状態で開く必要があるため、これは理にかなっています。
現在、状態が 5 であることを確認し、永続ストアを削除して、これが発生したときに再作成しています。しかし、アプリがライブになり、ユーザー データが保存されるようになると、このようなことはしたくありません。コア データ スキーマを移行するためのベスト プラクティスについては調べていませんがmanagedDocument.documentState == 5
、コードでチェックするのもややこしいようです。このドキュメントの状態に関するドキュメントはどこにもありませんか?
更新:今見てみると、これらの定数がこのように定義されている理由は、マスクとしてビットごとに ored できるようにするためであることが理にかなっています。したがって、documentState
5 に等しいということは、それが と の両方であることを意味しUIDocumentStateClosed
ますUIDocumentStateSavingError
。ただし、これらのエラーはかなり一般的です。根本原因を絞り込むにはどうすればよいですか?
また、これらのドキュメントの状態をチェックするために私が見たすべてのサンプル コードは、等しいif (managedDocument.documentState == UIDocumentStateClosed)
かどうかのチェックを示していますif (managedDocument.documentState & UIDocumentStateClosed)
。
uimanageddocument - uibiquity コンテナ (iCloud) が利用できない場合の UIManagedDocuments の保存
UIManagedDocument を単純なテスト アプリケーションに組み込む方法を理解することができました。期待どおりに動作します。ただし、ユーザーが iCloud を使用したくない場合でも機能するように、この基本的なアプリケーションにサポートを追加しています。
したがって、URLForUbiquityContainerIdentifier:
メソッドが「nil」を返す場合は、提案された方法を使用してローカル ドキュメント ディレクトリの URL を返します。
UIManagedDocument
ただし、をローカル URL (: など) に保存しようとするとfile://localhost/var/mobile/Applications/some-long-identifier/Documents/d.dox
、次のエラーが発生します。
この保存方法を使用する:
icloud - ローカルおよび iCloud をサポートする iOS アプリケーション
ユビキティ コンテナ (iCloud フォルダ) が何らかの理由で利用できない場合は、新しいドキュメントをユーザーの「ドキュメント」ディレクトリに追加しますが、再び利用可能になった場合は、ユビキティ コンテナにドキュメントを追加します。
私の質問は、ユビキタス コンテナーが非常に信頼できないと見なされているドキュメントを保存するための最良の方法は何ですか?
たとえば、ユーザーがクラウド内のドキュメントをオフにすると、それらのドキュメントは削除されます。ローカル ディレクトリに転送できるように、これが発生したときにリッスンする通知はありますか?
逆に、ユーザーがクラウド内のドキュメントをオンに切り替えた場合、ドキュメントをローカル ストアからユビキタス ストアに移動するための通知はありますか?
ありがとう
ios - UIManagedDocument、バックグラウンド スレッド、および親コンテキスト
UIManagedDocument のドキュメントで簡単に言及されています。
非同期データ書き込みをサポートするために、Core Data は実際にはネストされた管理対象オブジェクト コンテキストのペアを使用します。
それは UIManagedDocument または Core Data に固有のものですか?
同文書には、次のようにも記載されています。
必要に応じて、バックグラウンド スレッドから親コンテキストにデータを直接ロードできます。
それは、次のコードで
最初の行を次のように置き換えるだけです
それを達成するには?
この親コンテキストを直接使用するのが「適切」な場所についても混乱していると思います。つまり、すでに performBlock がタスクをバックグラウンド キューにアンロードするために使用されることを意図しているように聞こえます。親コンテキストをいじる必要があるのはなぜですか?
誰かが私のためにそれをすべて明確にしてくれれば幸いです。
core-data - UIManagedDocument の保存 - 速度の向上
プロパティ 'document' (タイプUIManagedDocument
) が設定されているときはいつでもビュー コントローラーで使用される次のコードがあります。
他の人がそうしているかどうかはわかりませんが、コアデータの同時実行の概念は非常に混乱していると思います.ドキュメントはそれを説明しようとしていますが、それでも理解するのは難しいです. このため、新しいセットUIDocument
が存在しない場合に、新しいセットを保存するために使用するコードを高速化する方法について、人々がアイデアを持っているかどうか疑問に思っていました. 他の人が使用したい場合、このコードは機能します。
私の主な目標は、ドキュメントの保存と読み込みにかかる時間を大幅に短縮することです。現在、これを行うのに約 20 秒かかりますが、これは長すぎます!
icloud - 同じ UIManagedDocument を 2 つの異なるデバイスに保存するとエラーが発生する
両方のデバイスで同じUIManagedDocument
ものを開く必要があり、保存します (次のコードを使用):
UIManagedDocument
s documentState がに変更されたと言われ、次のUIDocumentStateSavingError
エラーが発生します。
このエラーが発生する理由を知っている人はいますか?
iphone - UIManagedDocument を開くのに時間がかかりすぎる
最近、iOS で時刻表アプリを使用しているのですが、Core Data で問題が発生します。
私のアプリには、Apple が作成したオリジナルのカレンダー アプリのようなメイン ユーザー インターフェイスがあり、すべてのイベント データを Core Data データベースに保存しています。
NSManagedObjectContextを使用してデータベースからデータを取得するためにUIManagedDocumentを作成すると、すべて正常に動作します。
ただし、NSManagedObjectContextを使用して、実行時にいくつかの異なるビュー コントローラーでデータを数回フェッチする必要があります。そして、これを行うたびに、UIManagedDocumentを再度開く必要がありますが、ドキュメントを開くには時間がかかりすぎます(2秒以上かかる場合があり、ビューにスピナーを表示する必要があります)。
だからここに私の質問があります:
- managedDocument を開く正しい方法は何ですか?(つまり、ランチの画像の時間に開くということですか?)
- managedDocument を 1 回だけ開き、実行時に開いたままにする方法はありますか?(そのため、常にそのコンテキストを使用できます)
- 作成した managedDocument にデータは保存されますか?(ドキュメントを削除するとデータがなくなることがわかりました)
ありがとう。