問題タブ [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 投票する
5 に答える
2587 参照

objective-c - メインスレッドから実行された Core Data 挿入の取り消し

NSOperationを使用してデータをインポートするコードに取り組んでいます。NSManagedObjectインポート操作中に作成されたインスタンスをユーザーが元に戻せるようにしたいと考えています。

私が知るNSManagedObjectContext -undoManager限り、メイン スレッドから実行される操作に を使用することは不可能です。Use Thread Confinement to Support Concurrencyに関するCore Data Programming Guideセクションから、次の 2 つの条件があります。

  1. 管理対象オブジェクト コンテキスト間で (別のスレッドで) objectID のみを渡す必要があります。
  2. objectID を使用する前に、管理対象オブジェクトをコンテキストに保存する必要があります。

管理対象オブジェクトを共有する前に、プライベート ストレージ ( NSManagedObjectContext) からパブリック ストレージ ( )に移動する必要があるため、これは理にかなっています。NSPersistentStore

残念ながら、この-save:メッセージにより、元に戻すスタック内のマネージ オブジェクトも削除されます。同じガイドの「コア データを使用した メモリ管理」セクションから:

保留中の変更 (挿入、削除、または更新) がある管理対象オブジェクトは、そのコンテキストに save:、reset、rollback、または dealloc メッセージが送信されるか、変更を元に戻すための適切な回数の元に戻すまで、コンテキストによって保持されます。

この制限を回避するためにいくつかのことを試しましたが、最終的にはすべてがメイン スレッド (および回転するビーチ ボール) で発生する作業の大部分に戻ります。とても有難い。

--

拡張レーダーが送信されました: rdar://problem/8977725

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

cocoa - 関係がない場合にのみ、オブジェクトの削除を適切に処理しますか?

私は1対多の関係Personに属するエンティティを持っていDepartmentます。

関連付けられてDepartmentいるがなくなったときに削除できるようにしたいと思います(エンティティの削除または's属性の変更のいずれかによって)。現在、私は次のハンドラーを使用してこれを実行しようとしています(現在、削除を確認し、適切に削除しようとしています)。PersonPersonPersondepartmentNSManagedObjectContextObjectsDidChangeNotification

ただし、人を削除しても、所属部署の人数は変わりません。Departmentエンティティに対してフェッチを実行していません。それは私がすべきことですか?

0 投票する
4 に答える
2475 参照

iphone - タブ コントローラーで管理オブジェクト コンテキストを渡す

さて、私はこれを何度も理解しようとしました。

App Delegate が管理対象オブジェクト コンテキストをアプリケーションの最初のビュー コントローラーに渡してから、後続の各ビュー コントローラーが管理対象オブジェクト コンテキストを下に渡すようにするのがベスト プラクティスであることはわかっています。ただし、アプリケーションでタブ バー コントローラーを使用している場合、その余分なレイヤーについて頭を抱えているように見えることがあります。

私がそれを行う方法を理解できた唯一の方法は、各タブのルート ビュー コントローラーをアプリ デリゲートに "Reach Back" してコンテキストを取得することですが、私が理解しているように、これは貧弱な形式です。

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

objective-c - 基になる nsmanagedobjectcontext にオブジェクトを追加した後に uitableview/nsmutablearray を更新する方法

シンプルな 2 つのエンティティのコア データ リポジトリから取得した、学校のリストを表示する基本的な UITableViewController があります。テーブルビューは、NSManagedObjectContext からロードされる学校の NSMutableArray にバインドされます。

新しい学校を追加するためのフォームをユーザーに提示する「新しい学校を追加」ボタンを追加しました。ユーザーが新しい学校を追加して [保存] をクリックすると、新しい学校オブジェクトが NSManagedObjectContext に保存され、ナビゲーション スタックから [学校の追加] ビューがポップされます。元の uitableview に送り返されましたが、新しい学校はリストにありません。

戻ったときにテーブルビューを更新する必要があることはわかっていますが、その方法がわかりません。注: シミュレーターを終了してプログラムを再度実行すると、新しい学校の記録が表示されるので、基になるストアに適切に追加されていることがわかります。

確かに NSFetchedResultsController を実装する必要がありますが、それは非常に単純なように見えるものの大量のコードのようです。

NSFetchedResultsController が唯一の方法である場合、このフローを示す可能性のあるチュートリアルまたはコード リストを教えてもらえますか?

どうもありがとう。

フィル

0 投票する
4 に答える
1283 参照

iphone - アプリケーションの終了時に「一時的な」NSManagedObjectを適切に削除する方法

一時的なNSManagedObjectを作成し、それをメインのNSManagedObjectContextに関連付けます。コンテキスト内で完全に機能するオブジェクト(フェッチ要求の実行など)として処理できる必要があるため、コンテキストが関連付けられていないと作成できません。新しいViewControllerがスタックにプッシュされただけではないという条件の下で、ViewWillDisappearに管理対象オブジェクトを削除するロジックを含めます。

これにより、アプリケーションの終了を除くすべての場合で、管理対象オブジェクトが適切に削除されるようです。viewDidUnloadでオブジェクトを削除しようとしましたが、アプリケーションの終了時にメソッドが呼び出されていないようです。2番目の管理対象オブジェクトコンテキストを作成することを検討しましたが、可能であれば大きなオーバーヘッドを避けたいと思います。

ありがとう、グラハム

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

core-data - CoreData UITableView の問題へのデータのリロード

私は再び CoreData と戦っており、あなたの助けが必要です :P

RSSリーダーを書いています。デザインは、libxml2 ライブラリを使用した Apple TopSongs の例に基づいています。

アプリケーションが起動したら、最後の更新がいつだったかを確認しています。1 時間以上前の場合は、現在の永続ストアを削除して、すべてを再度ダウンロードします。

ローカルの sql ファイルが削除されたことがわかります。

現在、バックグラウンドでフィードから情報をダウンロードするためにいくつかの NSOperations を作成しています。

これまでのところ、すべてがうまく機能しています。

すべての RSS フィードと同様に、変更を確認して coreData を更新する更新ボタンがあります。手始めに、すべてを削除してすべてを再ダウンロードすることにしました(効率的ではありませんが、RSSフィードにはGUIDがなく、変更があったかどうかを判断するためにハッシュ関数を実装する必要があります)。

だから私がやっていることは、基本的に上記と同じコードを呼び出してストアを削除することです..すべてのRSSフィードを再度ダウンロードします(アプリケーションが最初にロードされたときと同じロジック)

テーブルをリロードしていますが、tableView で同じデータを表示できますが、すべてが変更されていません。

さらに進んで、コンテンツをダウンロードせずにストアを削除することにしました。

空のテーブルが表示されると思っていましたが、データはまだそこにありました。

これはどのように可能ですか?ストアを削除し、データを再取得してリロードしました。

私は何を間違っていますか?

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

iphone - InterfaceBuilderのXIBを介してNSManagedObjectContextを渡す方法

UINavigationControllerの下に1つのUIViewControllerがある単純なiOSアプリケーションがあります。UIViewControllerには、NSManagedObjectContextのIBOutletがあります。

AppDelegateにはnavコントローラー用のIBOutletがありますが、Viewコントローラーにはありません。ビューコントローラは、XIBプロセス(navコントローラの子として)によって自動的にインスタンス化されます。

この設定では、アプリデリゲートのNSManagedObjectContextをビューコントローラーのIBOutletプロパティにきれいに割り当てるか渡すにはどうすればよいですか。途中にnavコントローラーがあります:)そしてアプリデリゲートにはUIViewControllerの直接プロパティがありません。

これは奇妙な問題です。あるXIBコンポーネントのプロパティを別のコンポーネントのプロパティにリンクしたいのです。私が行ったXIB作業のほとんどは、プロパティを取得し、それをXIB内のオブジェクトにポイントします。これにより、通常のプロセスでインスタンス化されますが、この場合、コンテキストはアプリデリゲートで正しく作成されています。インスタンス化するときにViewControllerに渡します。