問題タブ [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.
iphone - UIManagedDocument ネストされたコンテキスト
私はアップルのドキュメントを読んでいますが、AIが答えを見つけることができないという質問があります。メイン スレッドの子コンテキストとプライベート スレッドの親コンテキストの 2 つのネストされたコンテキストを持つ UIManagedDocument オブジェクトがあります。次に、サーバー側があります。そのため、データがサーバーから到着したら、バックグラウンド スレッドで管理ドキュメントに挿入したいと考えています。
非同期キューを作成し、そこに NSManagedObjectContext を作成し、メインスレッドで作成された親 UIManagedDocument の子コンテキストとして設定するのはスレッドセーフですか?
言い換えれば、メインスレッドで作成されたプライベートスレッドの親で作成されたコンテキストに割り当てることはスレッドセーフですか?
ios - UIDocumentopenWithCompletionHandlerがiOSデバイスで完了していません
を使用して管理対象ドキュメントを開こうとしていますopenWithCompletionHandler:
私が遭遇している問題は、シミュレーターでは正常に動作することですが、iPhone 4でテストすると、完了ハンドラーが終了しません。コードは次のようになります。
これはシミュレーターで正常に機能し、documentIsReady
呼び出しに到達します(または、エラーが発生した場合は「ドキュメントを開けませんでした」)。ただし、iPhone 4では、CompletionHandlerブロックが実行されることはありません。ブロック全体(両方のifステートメントの前後)にブレークポイントを設定しましたが、何も呼び出されていません。コンソールに「ドキュメントを開けませんでした」、への呼び出しはありませんdocumentIsReady
。
また、iPhoneでアプリを初めて実行したときは、正しく動作するようです。また、これを呼び出し付きのifステートメントにカプセル化していfileExistsAtPath:
ます。ifステートメントの内部に入り込み、を呼び出していますopenWithCompletionHandler:
が、完了ブロックが起動されることはありません。
iOS5.1とXcode4.3.2を使用しています。
ios - iOS-コアデータ-作成/開く前
概要
名前のリストをテーブルビューに保存するiOSプロジェクトがあります。
データベースを開いたり作成したりした瞬間に、メソッドを実行するための完了ハンドラーがあることを理解しています。
手順:
- 私の場合、最初の画面は名前を表示するテーブルビューです
- (ナビゲーションバーに)+ボタンがあり、新しい名前を追加して、詳細を入力するための新しい画面に移動します。
懸念
私の心配は、完了ハンドラーでテーブルビューの名前をフェッチし、ユーザーがデータベースが開かれるのを待たずに新しい名前を作成する場合、それを保存している間、データベースが開かれない/作成されない可能性があることです。
質問
- そのような状況にどう対処するか?
- 私は何かが足りないのですか?
ios - NSFetchedResultsController が子コンテキストでのフェッチに失敗する
をUIManagedDocument
使用してリストに表示するデータがありますNSFetchedResultsController
。データはバックグラウンドで定期的に更新され、変更はUIManagedDocument.managedObjectContext
(performBlock: を使用して) に配置されます。
ドキュメントのメイン コンテキストからデータを表示すると、すべてが期待どおりに機能します。しかし、メイン コンテキスト ( child.parentContext = document.managedObjectContext
) の子であるコンテキストでリストを表示するとすぐに、オブジェクトが表示されず、次のエラーがコンソールに出力されます。
これは、新しいオブジェクトがドキュメント コンタクトに挿入された後にのみ発生します。自動保存が行われるまでしばらく待つと、リストが正常に表示されます。また、問題は、子コンテキストのみでsectionNameKeyPath
セットを持っている場合のみです。NSFetchedResultsController
これは、フェッチされた結果コントローラーをセットアップする方法です。派手なことは何もないので、ここで何が間違っているのかわかりません。
[Contact userDefinedSortDescriptors]
実行時に[Contact userDefinedSectionNameKeyPath]
解決されます。ソート記述子には、最初のエントリとして sectionNameKeyPath が含まれています。どちらも、nil
または他の面白いものにすることはできません。
編集:いくつかのあいまいな部分を明確にしました。具体的には、ドキュメント管理オブジェクト コンテキストで -save: を呼び出しません。
編集 2 : MOC が互いにどのように関係しているかを説明しようと思います。
3 つの管理対象オブジェクト コンテキストが使用されます。
1)UIManagedDocument.managedObjectContext
ドキュメントを読み込んで作成されます。
2) 時々オブジェクトを更新するバックグラウンド スレッドが実行されています。これはドキュメント MOC を親とするプライベート キュー moc です。
3) ユーザーが変更を加えたい場合、新しい MOC がドキュメント MOC の子として作成されます。これはメイン キューの MOC です。これは、上記のフェッチを実行するために使用されるコンテキストです。
バックグラウンド更新は NSOperationQueue から行われますが、バックグラウンド MOC へのすべてのアクセスは . で適切に囲まれてい-performBlock:
ます。他のすべてのアクセスは、メイン スレッドから行われます。
編集 3 : いくつかの設定で遊んでいるNSFetchRequest
ときに、設定すると問題が解決することがわかりましたfetchRequest.includesPendingChanges = NO
。しかし、UIManagedDocument によって変更がバックグラウンドで保存されるまで、ユーザーには更新が表示されないため、これは実行可能なソリューションではありません。
ios - UIManagedDocument を同期的に開く/作成する方法は?
タイトルで述べたように、UIManagedDocument
同期的にオープンしたいと考えています。つまり、オープンが完了するまで実行を待機させたいと考えています。mainThread のみでドキュメントを開いています。
ブロックを使用する現在の API を開く
リンクで言及されているロックの使用法は、メインスレッド以外のスレッドでもうまく機能します。でロックを使用するmainThread
と、アプリの実行がフリーズします。
どんなアドバイスも役に立ちます。ありがとう。
objective-c - 既知のURL/ファイルパスからUIManagedDocumentを取得するにはどうすればよいですか?
私の目的は、既知のURLからUIManagedDocumentオブジェクトを取得し、それを開くことです。
何かのようなもの:
次に、次のようなことができます。
私がアップルのドキュメントを検索したと信じてください。与えられたURLで初期化と呼ばれる唯一の方法があります。はい、前に作成して保存しましたが、後でそれを取得する必要があります。これを行う方法はありますか?
誰かがヒントを与えることができることを願っています、ありがとう
objective-c - 複数のNSFetchedResultsControllerがあり、UIManagedDocumentが1つしかないTabBarアプリケーション
管理対象ドキュメントを介して使用すると、CoreDataに問題が発生します。
複数のタブアプリケーションがあり、各タブには単一のデータベースの異なるエンティティが表示される必要があります。
管理対象ドキュメントを初期化するために、管理対象ドキュメントをインスタンス化し、作成し、開いて、plistファイルからすべてのデータを追加するヘルパークラスメソッドを作成しました。次に、このメソッドのパラメータであるブロックを呼び出します。このようにして、タブビューの1つからこれらすべてを呼び出し、fetchedResultsControllerを作成するメソッドを(ブロックごとに)渡すことができます。
データベースを開くのに時間がかかることがわかっているので、このようにします。開く前にFRCを設定すると、機能しません。そこで、DBを開いたときに実行されるブロックでブロックを呼び出します。
私の問題は、タブを切り替えるときに発生します。私はすべてのビューでこのヘルパーメソッド(対応するブロックを含む)を呼び出しviedDidLoad
ますが、すべての節約が行われるため、これはデータの破損につながると思います。
最初のビューでヘルパーメソッドを1回だけ呼び出してから、コンテキストを他のすべてのタブに渡して、最初にタブをすばやく切り替えても機能するようにする方法はありますか?
または、すべてのプロセスを間違って実行している可能性があります。これをすべて機能させる別の方法がありますか?私はCoreDataをまったく使用していません。
前もって感謝します!
ios5 - [[UIManagedDocument alloc]initWithFileURL:url] はシミュレーターでクラッシュしますが、iPad では動作しますか?
アプリで managedDocument を設定し、CoreData を使用してこのドキュメントを更新しようとしています。このコードを viewDidLoad でアプリに追加したところ、アプリが EXC_BAD_ACCESS でクラッシュするようになりました
URL が有効な URL であることを確認しました。クラッシュは、この時点を超えたデバイスで実行した場合にのみシミュレーターで発生します。
これを修正するためにどこから始めればよいか知っている人はいますか?
objective-c - UIManagedDocument の保存時にアプリがクラッシュする
最初にいくつかのデータを UIManagedDocument にロードしてから実行するアプリケーションがありますsaveToURL:forSaveOperation:completionHandler:
。completionHandler ブロック内で、このデータベースのさまざまな要素の更新を行い、それが完了すると、別の保存を行います。
それに加えて、アプリには、データの再読み込み、データの再更新、およびデータベースの 1 つのエンティティの削除をそれぞれ行う 3 つのボタンがあります。どのボタン方式でも、最後の命令は節約にもなります。
これらすべてをシミュレーターで実行すると、すべてがスムーズに進みます。しかし、デバイスではそうではありません。常にクラッシュします。通常、「削除」ボタンを押すか、データベースを再ロードまたは再更新するとクラッシュすることがわかりました。そして、それは常にsaveToURL
操作にあります。私の意見では、データベースを保存するスレッド
が複数ある場合に問題が発生します。デバイスのコード実行が遅くなると、複数の節約が同時に発生し、アプリがそれらを正しく処理できなくなる可能性があります。また、削除ボタンでエンティティが削除されず、エンティティが存在しないと表示される場合があります (存在する場合)。
私はこれに完全に困惑しており、このすべての保存操作を実行する必要があります...実際、それらを削除すると、アプリはさらに一貫性のない動作をします。
この問題を解決するために何ができるかについての提案はありますか? どうもありがとうございました!
[編集] ここに問題のあるコードを投稿します。最初にデータをロードするために、ヘルパー クラスを使用します。具体的には、次の 2 つのメソッドを使用します。
ビューには、次のような 3 つのアクション メソッドがあります。
[編集 2] コードの追加: まず、最初のビューは次のように viewDidLoad を実行します。
setupFetchedResultsController メソッドは次のようになります。
アプリの各ビュー (タブがあります) には、データベースに含まれるさまざまなエンティティを表示するために、異なる setupFetchedResultsController があります。
ヘルパー クラスでは、これが各ビューの viewDidLoad を介して実行される最初のクラス メソッドです。
objective-c - UIManagedDocument を正しく初期化、使用、保存する方法
UIManagedDocument を使用してアプリを動作させることを扱っています。数日前に別の質問を投稿しましたが、まだ機能していません。これをもっとうまくできるか見てみましょう。
私のアプリは、plist ファイルからいくつかのデータをロードし、それをデータベースに入力する必要があります。次に、時々変更されるいくつかのパラメーターがあり、それらをデータベースにロードして更新する必要もあります。
アプリは次の順序に従う必要があります: データベースを作成/開き、データをロードし、変数データを更新します。
私の問題は、そのシーケンスを正しくたどろうとしたときに発生します。これは主に、すべてのオブジェクトがデータベースに作成される前に変数データを更新できない (したがって、更新する必要がある nil 変数) ためであり、私の回避策は予期しない結果につながるだけです。クラッシュと非論理的な行動。
ここ'
ビューコードでは:
次に、次のコードを含むこのヘルパー クラス「DataHelper」を使用します。
「saveToURL」メソッドを使用すると、正しくないように見えますが、すべてのデータがデータベースにロードされるまで最後のメソッドが実行されないため、ロード シーケンスが正しく実行されます。ただし、多くの操作を実行しようとすると、アプリがランダムにクラッシュします (削除、更新、再読み込みなど、多くの節約が行われます)。
一方、「updateChangeCount」を使用すると、アプリはクラッシュしなくなりますが、シーケンスはうまく機能しません。変数データは更新されず、アプリはそこにあるオブジェクトを見つけられません。データベースなど。各アクションの間に2分ほど待つと、はい、機能します...しかし、それは私が望んでいることではありません.
ここで助けていただければ幸いです。これは私の時間を浪費しており、このプロジェクトの締め切りはかなり間近です :( どうも
ありがとうございました!