問題タブ [nsmanagedobjectcontext]

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.

0 投票する
3 に答える
3708 参照

iphone - NSManagedObjectのインスタンスをNSManagedObjectContextに追加します。同じインスタンスの更新に失敗しました。

iPhoneアプリでコアデータを使用しています。NSManagedObjectから派生し、次のプロパティを使用する単純なクラスFriendを作成しました。

このクラスのインスタンスをコンテキストに追加および削除することができ、変更も永続的です。
ここで、フレンドインスタンスを更新/変更して、再度永続化する必要があります。

しかし、これはうまくいかないようです。

これが私の問題を示すコードの一部です:

コメント1ではすべてが順調です。Friendタイプの新しいNSManagedObjectを取得し、nameプロパティを変更できます。コンテキストは、保存するものがあることを示しています。コンテキストを保存した後、context.hasChanges==0が表示されます。コンテキストを保存した後もデータが永続的であることに注意してください。

コメント2の後、nameプロパティを変更します。ここで、context.hasChanges == 1を期待し、コンテキストを保存した後も、新しい名前が永続的であると期待します。しかし、残念ながらそうではありません。アプリケーションを再起動し、name-property = @"name1"でFriendインスタンスをロードします。

コアデータドキュメント内にヒントや例が見つかりません。だから私は何が間違っているのですか?既存のフレンドインスタンスを更新/変更し、それを永続化するにはどうすればよいですか?

私が見る唯一の解決策は、エントリを削除し、変更して、再度追加することです。しかし、これが正しい方法だとは思いません。

ありがとう!

0 投票する
2 に答える
475 参照

iphone - CoreDataのsaveメソッドが機能していません

coredataを使用してiPhone用のアプリを作成しています。

そのオブジェクトをFavoriteViewControllerに保存したいオブジェクトを持つViewControllerがあります。お気に入りのボタンをクリックして、オブジェクトをmanagedObjectContextに保存したいのですが、次のエラーが発生します。

キャッチされなかった例外「NSInternalInconsistencyException」が原因でアプリを終了しています。理由:「フェッチがすでに進行中の状態で別の操作を実行しようとしました」。*

私のコード:

何が間違っているのかわかりません。

0 投票する
2 に答える
544 参照

objective-c - コア データ: 保存されていないオブジェクトを削除するとエラーが発生する

コア データ プロジェクトで問題が発生しました。NSManagedObjects を含む NSArrayController と + / - ボタンがあります。ファイルが保存された後に行内のオブジェクトを削除すると完全に機能しますが、新しいオブジェクトを追加してすぐに再度削除すると (デフォルト値を変更せずに)、エラーが発生します:

新しいオブジェクトの追加を取り消しても同じです。

何をすべきかを教えてくれる人はいますか?一時的なIDしか持っていないことが関係していると思いますが、解決方法がわかりません。

0 投票する
2 に答える
351 参照

iphone - 複数の NSManagedObjectContext 間の無限再帰同期の回避

セットアップ:

(iPhone アプリケーションで) 2 つのマネージド コンテキストをセットアップしています。ほとんどのクエリに使用するメイン コンテキストと、バックグラウンドで発生させたい長時間実行操作に使用するバックグラウンド コンテキストです。

各管理対象オブジェクト コンテキストに対して NSManagedObjectContextDidSaveNotification の通知をセットアップしました。通知に応じて、mergeChangesFromContextDidSaveNotification を呼び出して同期します。また、メイン コンテキストで状況が変化するたびに、バックグラウンド コンテキストでいくつかのジョブを実行する必要があることも要件です。これは、物事の状態が変化したためです。

コンテキストの 1 つだけに書き込む限り、これは正常に機能します。この場合、メイン コンテキストに書き込みます。ただし、バックグラウンド コンテキストで記述すると、無限ループが発生します。バックグラウンド コンテキストに保存すると、メイン コンテキストへの通知がトリガーされます。メイン コンテキストは、変更をマージし、バックグラウンド コンテキストによって取得された独自の通知を起動します。これにより、バックグラウンド コンテキストがバックグラウンド ジョブを実行するようにトリガーされ、(何かを書き込む場合) サイクルが再び開始されます。

これは間違った設定であるか、「メインコンテキストで何かが変更されるたびにバックグラウンドジョブの処理を開始する」を変更通知から切り離す方法が必要か、またはバックグラウンドコンテキストを読み取り専用にする必要があるようです。

アイデア?典型的な「2 番目のコンテキストはインポート用」のシナリオとは異なり、バックグラウンド コンテキストをメイン コンテキストに関して最新の状態に保つ必要がある/望んでいると考えているため、バックグラウンドから適切な結果が得られます。仕事。

0 投票する
1 に答える
1006 参照

iphone - 取得したオブジェクトを変更せずに NSFetchedResultsController でリロードをトリガーするにはどうすればよいですか?

私の iPhone アプリでは、UITableView に User オブジェクトを表示する NSFetchedResultsController があります。ユーザー オブジェクトには、0 から多数のログ オブジェクトがあります。Log オブジェクトの概要は、UITableView の User オブジェクトと一緒に表示されます。

私のアプリはタブ バーを使用しているため、[ログ] タブでユーザーが入力するには、ユーザー タブの NSFetchedResultsController をトリガーしてリロードする必要があります。

これまでのところ、User オブジェクトに書き込むことでそれを行います。

これは問題なく動作しますが、ハックのように見えます。

これを行うより良い方法はありますか?Log オブジェクトの変更が User オブジェクトにも反映されるように指定するのと同じように?

0 投票する
1 に答える
229 参照

core-data - MOC の複数のレイヤーがマージされます...CoreData のベテラン、どう思いますか?

元の質問に回答しました。更新は、コメントで提起された関連する質問に対処します。

元の投稿:

Apple のCoreDataBooksで使用されている MOC 保存メソッドを使用しています。ただし、2 層の MOC マージ (3 番目が 2 番目とマージされ、次に 2 番目が 1 番目とマージされる 3 つの MOC) を使用しているようです。

まず、学校のクラスを一覧表示するテーブルビュー (ClassList) があります。クラスを選択すると、2 行のテーブルビュー (AddClass) がプッシュされます。AddClass の最初の行で、ユーザーはクラスのタイトルを編集できます。2 番目の行を選択すると、そのクラスの学生名簿を表示するテーブルビュー (ClassRoster) がプッシュされます。最後に、学生を選択すると、別の 2 行のテーブルビュー (AddStudent) がプッシュされ、ユーザーは学生の名前とユーザー名を編集できます。

デュアル MOC マージ メソッド (CoreDataBooks で採用されている managedObjectContext および addingManagedObjectContext) を使用して、クラスを正常に追加および保存できます。最初のビューで「ベース MOC」を「MOC1」と呼び、「スクラッチパッド」MOC を「MOC2」と呼びます。

MOC2 は、クラス オブジェクトに加えられた変更を一時的に格納します。-didFinishWithSave:(BOOL)これらの変更は、デリゲートに を送信して、保存またはキャンセルすることができます。保存すると、MOC2 で行った変更が MOC1 にマージされます。そのマージは完全に機能しています。

学生オブジェクトに加えられた変更の処理は、私が間違っているところです。私は、MOC2 とマージされる学生オブジェクトへの変更のためのスクラッチパッドとして MOC3 を使用できると考えました (学生オブジェクトを保存したとき)。クラス オブジェクトを保存したときに、MOC2 を MOC1 と一緒に保存できます。

しかし、MOC3 を保存し、学生オブジェクトをクラス オブジェクトに追加すると、コンテキストが異なるため、エラーが発生しました。コードを投稿することはできますが、最初に、より大きな質問をしたいと思いました。これは間違った方法で行っているのでしょうか?

アップデート:

Zarra 氏は、MOC を使用initWithEntity:insertIntoManagedObjectContext:して nil に設定し、後で MOC を設定して保存できる一時オブジェクトを作成することを推奨しました。

彼のアドバイスに従って、次のコードを組み込むことを試みています。

エラーが発生しましたが、このコードに関連しているかどうかはまだわかりません。見つけたものをデバッグして投稿します。

0 投票する
1 に答える
253 参照

iphone - iPhone 管理対象オブジェクトの削除がクラッシュする

for ループを呼び出して、いくつかの管理対象オブジェクトを削除しようとしています

ループの最後で、私は呼び出します

上記の行で、アプリがクラッシュし、そこからどこにも行きません。何か案は?

ありがとう

0 投票する
2 に答える
976 参照

core-data - COMPILED Core Data Managed Object Model: それと対応するデータベースから最大限の情報を取得

私は Objective-C の初心者です。本やインターネットで解決策を見つけることができませんでした。

私の質問:ソース コードがなくても、コンパイル済みの .mom と SQLite db を使用する最も効率的で最速の方法は何ですか?

詳細: 小さなアプリを別のアプリケーションのデータベースに接続し、そのデータの一部を (読み取り専用で) 使用しようとしています。しかし、そのアプリには SDK がないため、この作業は困難です。

そのアプリには、コンパイルされた .mom ファイルと SQLite データベースがあります。

プログラムで (IB を使用せずに) .mom を使用してデータベースに接続することに成功し、エンティティを取得したり、自分で再作成したオブジェクトにデータを入力したりすることができました。しかし、すべてのステップを推測、試行錯誤で行っています。したがって、開発には多くの時間がかかり、エラーが発生しやすくなります。分析するのが最も難しい作業は、中間テーブルを介した対多関係です。

例: エンティティ "Books" は "Authors" と関係があります。著者の順序が重要であるため、次のフィールドを含む中間テーブル「authorsNumbered」があります。番号、著者、本。フィールド「番号」は、どこにでも表示される著者の正確な順序を決定します (重要!)

最終的に、NSSortDescriptor を使用して順序付けられた著者の配列を作成することができましたが、その方法を見つけて推測するのに丸 1 週間かかりました!

私が使用したものよりも、コンパイルされた .mom を処理するためのより効率的な方法を提案していただけますか?

ありがとう

0 投票する
3 に答える
2893 参照

iphone - 異なるコンテキストのオブジェクト間の不正な関係:しかし、私には1つのコンテキストしかありませんか?

次のエラーが発生します。

'NSInvalidArgumentException'、理由:'異なるコンテキストのオブジェクト間の関係'条件'を確立しようとする不正な試み

私のiPhoneアプリを実行しているとき。私のモデルの関連部分は次のようになります。

コンテキストのために、モデルのこの部分は、アーボリストが木の冠の状態を記録できるように設計されていることを説明します。これには、ユーザーが編集できる樹冠を評価するためのオプションのリストが格納されます(したがって、TreeCrownConditionsにはオプションが含まれ、TreeCrown.conditionは評価で行われた特定の選択を指します)。

これらのオプションをロードし、didSelectRow:inComponentの次のコードを使用して、選択したオプションをAssessmentTreeに関連付けるUIPickerViewがあります。

これを実行すると、最初の数回はオプションを選択してすべてが正常ですが、(通常はTreeCrownConditionオプションを追加/編集/削除した後)アプリが上記の行でクラッシュし、最初に投稿したエラーが発生することがあります。

アプリ全体で1つのNSManagedObjectContextのみを使用していることを除けば、エラーは簡単に修正できるようです。新しいコントローラーはそれぞれ、次のコードがロードされたときにそれを取得します。

このエラーやその解決方法に関する情報はあまり見つかりませんでした。また、複数のコンテキストを使用せずにこの問題が発生した人は確かに見つかりませんでした。

どういうわけ複数のコンテキストがあると思いますが、それがどのように可能かわかりません。私は何が欠けていますか?

スタックトレースを編集します。

0 投票する
2 に答える
8313 参照

core-data - 'NSInvalidArgumentException'を使用して、managedObjectContextを保存するとクラッシュしますが、散発的にしか発生しません

managedObjectContextのsave:コマンドでクラッシュが発生し続けます。NSLogステートメントも実行されないため、未解決のエラーステートメントが表示されないため、問題が何であるかを理解できません。それは毎回起こるわけではありませんが、散発的にしか起こりません。

コードは次のとおりです(基本的にカウンターをインクリメントしたい):

コンソールウィンドウに、次のようなメッセージが表示されます。

またはこれ:

またはこれさえ:

次に、最初のスローでコールスタックが表示され、続いて通知が表示されます(「NSException」、「[プロセス23501への切り替え]」、および「プログラム受信シグナル:「SIGABRT」のインスタンスをスローした後に呼び出された終了」。

問題はCoreDataに関係していると思いますが、よくわかりません。ビルドとターゲットをクリーンアップしましたが、役に立たないようです。ManagedObjectContextをロック/ロック解除しようとしましたが、役に立ちません。

解決策を探し始める場所に関するここでのアイデアは大歓迎です!