問題タブ [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.
objective-c - データベースからのデータの取得 (CoreData)
2 つの質問があります。
1-エンティティを入力してフェッチするには同じ UImanagedDocument が必要ですか、それとも異なるオブジェクトからデータを入力して読み取ることは可能ですか?
2- データベースにデータが入力されたことを確認する方法はありますか? (データのフェッチを除く)
ありがとう!
objective-c - UIManagedDocument fileModificationDate は変更されません
データを開いたり、閉じたり、変更したり、適切なUIDocument
Saving API メソッドを使用してドキュメントを保存したりしても、fileModificationDate
プロパティから返される値は変更されません。
ドキュメントから:
変更日は、、、およびメソッドによって更新さ
openWithCompletionHandler:
れsaveToURL:forSaveOperation:completionHandler:
ますrevertToContentsOfURL:completionHandler:
。
ただしfileModificationDate
、コア データ ストアが更新されているかどうかに関係なく、常にドキュメント ファイル ラッパーの作成日を報告します。
確かにこれは正常な動作ではありませんよね?
特定の追加コードはありません。これは単純に UIManagedDocument のサブクラスです。UIManagedDocument は、ドキュメント ラッパー内の Core Data ストアを自動的に管理します。次のような単純なコード:
ドキュメントが作成された日付を常に返します。作成日と変更日はどちらも同じで、ドキュメントが作成のために最初に保存された日付です。ただし、コンテンツ ストア ファイルの変更日は変更され、作成日はドキュメント ラッパーと同じです。
iphone - コア データ - UIManagedDocument が開かない
Core Data を使用して、各ユーザーに関連するいくつかの単純な文字列を保存しています。アプリが最初に起動したときは、すべて問題ないようです。データベースが開き、データを正常に保存および取得できます。
ただし、しばらく使用した後UIManagedDocument
、アプリの起動時に私が使用するものが開かないことがあります。そのために使用する方法は次のとおりです(アプリデリゲートで実行):
このコードは、アプリのdidFinishLaunchingWithOptions
. if ステートメントのsaveToURL
半分が最初に呼び出され、成功を返します。次に、次のいくつかの呼び出しでopenWithCompletionHandler:
が呼び出され、正常に戻ります。
ただし、アプリをしばらく使用した後のある時点で、openWithCompletionHandler:
success = FALSE が返されます。なぜ、またはどのようUIManagedDocument
に混乱するのかはわかりません。URL は同じようで、fileExistsAtPath
はまだ を返してYES
います。
なぜこれが起こっているのか誰にも分かりますか?または、デバッグして、オープンが失敗する原因となっている実際のエラーを見つける方法がある場合は?
ios - UIManagedDocument シングルトン コード openWithCompletionHandler が 2 回呼び出されてクラッシュする
単一の共有 UIManagedDocumentを使用して Core Data で Justin Driscoll の実装を使用しています。iPhone アプリでは、iPad ストーリーボードと iPad アプリ用の分割ビュー コントローラーに移動するまで、すべて問題ありませんでした。問題は、openwithCompletionHandler が 2 回呼び出されていることです。1 回目は viewDidLoad のマスター ビューから、もう 1 回は詳細ビュー viewWillLoad です。呼び出しは立て続けに行われ、ドキュメントはまだ UIDocumentStateClosed にあるため、シングルトンの performWithDocument メソッド (以下) に対して 2 回目の呼び出しが行われると、アプリがクラッシュします。iOS5.1 の投稿に対する e_x_p の回答を見ました: タスクの同期 (完了を待ちます)ただし、以下の performWithDocument が同じスレッドで呼び出されるため、この場合 @sychronized は機能しません。openwithCompletionHandler への複数の呼び出しから保護するにはどうすればよいですか? これを防ぐために考えられる唯一の方法は、UIDocumentStateNormal が true であると確信できるまで上記のいずれかの呼び出しの実行を一時停止してから解放することです。ただし、メインの UI スレッドがフリーズするため、良くありません。UIをフリーズさせずにこれを行う最善の方法は何でしょうか?
UIManagedDocumentSingleton コードから:
iphone - GCDバックグラウンドキューからUIManagedDocumentに追加しますか?
多数の管理対象オブジェクトを作成して、バックグラウンドキューからCoreDataに追加しています。私の理解では、バックグラウンドスレッドからコンテキストにアクセスできなかったため、performBlockを使用して、コンテキストが作成されたのと同じキューにコアデータを追加するようにスケジュールしていました。これは問題なく動作します...
私の質問は、テスト中に[moc performBlock:^{ ... }];
、アプリケーションを削除しても期待どおりに機能することに気づきました(おそらく数分の1秒速くなります)performBlock
?私はそうしていると思いますが、(今のところ:)スレッドセーフではない方法で機能しているので、理解に欠陥がないことを確認したかっただけです。
編集: createRodInContextの実装を追加しました...
objective-c - NSFetchedResultsControllerメソッドが呼び出される前にUIManagedDocumentの準備ができていることを確認するにはどうすればよいですか?
私はこれに完全に固執しています。私の基本的な問題は、次のことです。
managedObjectContext / UIManagedDocumentがnilであるため、コアコアエンティティを読み取ろうとするとメソッドがクラッシュします。現時点では、UIManagedDocumentが開いていない/準備ができていないことが原因だと思います。そのため、過去3時間、ドキュメントが開かれるまでデリゲートメソッドが起動されないように作成しようとしています。
これは、ドキュメントを取得するために使用しているコードです。
これは私のアプリの他の場所では問題なく機能しますが、テーブルビューのデリゲートメソッドに対して開くプロセスが十分に速くないようです。
私がこれまでに見たリンク:
http://omegadelta.net/2011/05/10/how-to-wait-for-ios-methods-with-completion-blocks-to-finish/
dispatch_queue_tとdispatch_syncの呼び出しについて
グランドセントラルディスパッチ(GCD)とperformSelector-より良い説明が必要
iOS-スレッド(GCDを使用)がジョブを終了したときに通知を受ける方法
私は試しました:NSNotification(CATManagedDocumentHandlerで設定)を取得するまでメインスレッドをブロックし、ブロックコールバックを取得するまでメインスレッドをブロックします。
これらはどちらも機能しません。アプリがフリーズします。私はこれについて間違って考えていますか?ドキュメントが開く/準備ができるまでデリゲートメソッドを待機させるにはどうすればよいですか?それとも、これで取るべき別のアプローチがありますか?
ありがとう
カール。
ios - App Delegate からタスクを起動し、競合状態を回避するための戦略
コアデータの上に小さなアプリを開発しています。起動時に、メンテナンス タスクを開始する必要があります。高速ですが重要です。このタスクを実行するには、アプリ デリゲートが UIManagedDocument を開き、さまざまなチェックを実行する必要があります。チェックが完了するまで、アプリ ビューを開始しないでください。UIMD を開くことは非同期であるため、最初の UIview がドキュメントにアクセスしようとしたときに、アプリの委任は完了しません。ドキュメントの状態がまだ確定していない間に、アプリ デリゲートとビューがドキュメントを同時に開こうとするため、競合状態が原因でアプリケーションがクラッシュします。
絵コンテを使っているので、セグエはほぼOS任せ… 次回は全部手動でやってみようかな..
あなたの推奨事項は何ですか?注: 1) アプリのときはタスクを実行できません。バックグラウンド状態に戻ります。これは、元のデータベースとビューに表示される内容との間で矛盾した状態を回避するのが非常に面倒になるためです。2) 同じ理由で、通常の実行中に保守タスクを実行することは容易ではありません。3) すべてのビューは、ここで提案されているコードに従って、シングルトンを介して UIMD にアクセスします。
UIView でミューテックス ロックを設定することは、私の好みのルートではありません。アプリのデリゲートによって解放されるまで、タブ バーを表示している間、画面が黒のまま (データがない) であるためです。
コントロールを UIViews に渡す前に、アプリのデリゲートにシグナルを待機させる方法はありますか? この場合、落とし穴はありますか? これはおそらく推奨される方法ではないと思います。デリゲートがメンテナンス タスクの完了を待つ時間が長すぎると、iOS がアプリを強制終了する可能性があります。この場合、「長すぎる」とは何でしょうか。
ios - UIManagedDocument openWithCompletionHandler が NO を返す
そのため、Core Data を UIManagedDocument に移行していました。
iPhone シミュレーターで openWithCompletionHandler を呼び出すと正常に動作しますが、実際のデバイスでプロジェクトを実行しようとすると、常に NO が返されます。handleError をオーバーライドすると、次のようになります。
そして、それが私がそれを呼ぶ方法です:
ios - iOS UIManagedDocument:プリロードされた永続ストアを開くことができません
UIManagedDocumentに基づいてアプリに永続ストアをプリロードして、コアデータを処理しようとしています。
私がアプリBで使用しようとしている永続ストアは、アプリAのおかげで「生成」され、入力されます。アプリAとBIの両方で、Justin DriscollのUIManagedDocumentハンドラーを使用します( Mister Driscollに感謝します!)。すべてアプリAで完全に機能します。
このスレッドで説明されている手法に基づいて:UIManagedDocumentを使用してiOS 5にコアデータデータベースをプリロードし、永続ストアをBのアプリバンドルに配置し、必要に応じてこのストアをドキュメントフォルダーにコピーしようとします(実行されていない場合) before)インスタンス化する直前のinit。
バンドルからドキュメントへのコピーはすべて問題ありませんが(別の方法を試し、ファインダーとnslogのおかげで作成を確認しました)、「ドキュメント」を開くことができません。アプリはクラッシュせず、ビューは表示されますが、テーブルは空です(アプリAとまったく同じコードを使用し、同じfetchedResultsControllerを使用します)。最初に、コピーされた永続ストアが空だと思った後、ドキュメント/コピーされた永続ストアを正しく開くことができないことに気付きました)=>ドキュメントの状態= 5、つまりUIDocumentStateClosedとUIDocumentStateSavingErrorのエラー(正しく解釈した場合??? )。
(注:バンドルから直接ドキュメントをインスタンス化して開くことも試みましたが、同じ問題が発生しました:doc state = 5)
だから...このドキュメントの状態と戦う3日間=5で、何を修正するかについての手がかりはありません
アプリBのバンドルに入れたファイルに何か問題があると思います(現在、[追加されたフォルダーのフォルダー参照を作成する]を選択してファインダーからxcodeにドラッグアンドドロップします)おそらく、いくつかのオプション、メタデータ、またはファイルに関するものです権限または...
何を調査するかについて何か考えはありますか?
(次のコードについてではないと思いますが...)これが私が初期化する方法です(Justin Driscollハンドラーに基づいています。custoのみです:ドキュメントフォルダーにストアパッケージがあるかどうかを確認します。そうでない場合は、ベースで作成しますバンドル内のファイル)
Driscoll氏によって提供されたperformWithDocumentコードに対して行った「変更」のみが、何が起こっているかを確認するためのnslogです(最初に開いた試行ごとにドキュメントの状態が1から5になり、その後5に固執します...)
core-data - Fetch on Core Data はシミュレーターでは機能しますが、デバイスでは機能しません
ゲームを選択するために VC1 を提示し、選択したゲームのプレイを送信するために VC2 を提示するアプリがあります。ユーザーが VC2 から VC1 に戻ったときに、プレイしていたゲームのゲーム データを保持したいと考えています。iOS 6.0 であるため、UIManagedDocument を使用して Core Data にアクセスし、ゲーム データを保存および取得しています。そして、私は直面している問題に完全に困惑しており、数え切れないほどの時間を費やした後、このフォーラムの賢明な人々に手を差し伸べています.
以下のコードをシミュレーターで実行すると、すべて正常に動作し、データが保存され、ユーザーが以前と同じゲームを選択してプレイした場合にデータを取得して表示することもできます。残念ながらデバイス上では、データがセグエに保存されていることがわかります - ブレークポイントを設定し、iExplorer を使用して persistentStore を調べました - しかし、保存されたゲームを選択して VC2 に戻るとすぐに、persistentStore が上書きまたは消去されたようですすべてのデータの。デバッガーで、"UIManagedDocument" の _persistentStoreCoordinator オブジェクトの _persistentStores NSArray プロパティが、デバイスで取得が行われると常に 0 を表示することに気付きました。
どんな助けでも大歓迎です!!!
永続ストアに関するいくつかのログ情報
DEVICE
最初に VC2 に入り
ます ドキュメントの説明を印刷します->_persistentStoreCoordinator: ドキュメントの説明を印刷します->_persistentStoreCoordinator-> persistentStores: < _NSArrayM 0x1fd28ce0>(
)
VC2 終了時に VC2 で最初に設定する
ドキュメントの説明の印刷 ->_persistentStoreCoordinator: ドキュメントの説明の印刷 ->_persistentStoreCoordinator -> persistentStores: < _NSArrayM 0x1fd28ce0>( (URL: file://localhost/var/mobile/Applications/4DD2D219-5AC1- 406F-8020-260B01E46E0C/Documents/GameDB/StoreContent/persistentStore) )
2 番目に入力する VC2
文書の説明の印刷->_persistentStoreCoordinator: 文書の説明の印刷->_persistentStoreCoordinator-> persistentStores: < _NSArrayM 0x211d4660>(
)
SIMULATOR
まず VC2 に入る
文書の説明を印刷する ->_persistentStoreCoordinator: 文書の説明を印刷する ->_persistentStoreCoordinator -> persistentStores: < _NSArrayM 0x84e4b60>( (URL: file://localhost/Users/Rujul/Library/Application%20Support/iPhone %20Simulator/6.0/Applications/B187169B-8D32-4BB1-AB41-33DB76637D9C/Documents/GameDB/StoreContent/persistentStore) )
VC2 終了時に最初に設定する
ドキュメントの説明の印刷 -> _persistentStoreCoordinator: ドキュメントの説明の印刷 -> _persistentStoreCoordinator -> persistentStores: < _NSArrayM 0x84e4b60>( (URL: file://localhost/Users/Rujul/Library/Application%20Support/iPhone% 20Simulator/6.0/Applications/B187169B-8D32-4BB1-AB41-33DB76637D9C/Documents/GameDB/StoreContent/persistentStore) )
VC2 に入る 2回目
ドキュメントの説明の印刷 ->_persistentStoreCoordinator: ドキュメントの説明の印刷 ->_persistentStoreCoordinator -> persistentStores: < _NSArrayM 0xf777910>( (URL: file://localhost/Users/Rujul/Library/Application%20Support/iPhone% 20Simulator/6.0/Applications/B187169B-8D32-4BB1-AB41-33DB76637D9C/Documents/GameDB/StoreContent/persistentStore) )