問題タブ [nsmanagedobject]
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 - NSManagedObjectContextのインスタンスを保存しても、変更可能な変換可能な属性は永続的に保存されません
Core Data+sqliteをデータキャッシュとして使用しています。アプリはファイルをコアデータに読み込み、コアデータを使用してアプリを実行します。保存は、NSManagedObjectContextとファイルの両方に対して行われます。ただし、Core Dataデータベースにデータを再入力せずにアプリを終了してリロードすると、-save:を使用して保存されたデータの一部(すべてではない)がデータストアに保存されないことに気付きました。
管理対象オブジェクトへの変更はすべてメインスレッドで1つのバッチで行われ、すべての変更が完了した後に-save:メッセージが送信されます。保存されていないデータは、変換可能な属性であり、コアデータオブジェクト内の唯一の変換可能な属性です。オブジェクトを保存するコードは次のとおりです。
アボート(); 呼び出されないので、-saveと仮定します。正しく呼び出されています。
関連しているとは思えませんが、このコードをメインスレッドで実行した後、別のスレッドで新しいNSManagedObjectContextを使用してNSFetchRequestを実行します。他のスレッドのコアデータに関連する他のことは何も起こりません。
変換可能な属性が保存されないのはなぜですか?
iphone - NSManagedObject init/deallocと同等
foo
NSManagedObjectサブクラス内にオブジェクトivarbar
があり、オブジェクトが存在する限り、常にそこに存在する必要があります。
が正しく作成されることを確認するために、作成時に作成するようにfoo
awakeFromInsertをサブクラス化しました。ストアからフェッチされたときに確実に存在するように、awakeFromFetchでも同じことを行いました。foo
bar
foo
bar
これに対抗するために、foo
willTurnIntoFault内とprepareForDeletionでリリースします。
ただし、deleteを実行するbar
と、prepareForDeletionとwillTurnIntoFaultの両方が呼び出され、foo
2回解放されることがわかりました。
おそらくprepareForDeletionでリリースできないことはわかっていますが、ここでのベストプラクティスを知りたいので、何かが障害になったことなどを理解しています。通常のオブジェクトの場合は、作成するだけです。foo
initで、deallocで破棄します。
ありがとう!
iphone - NSManagedObject Core Data - 構造体または共用体ではないメンバー「属性名」の要求
シナリオ:
「インポート」という名前の xcode プロジェクトを作成し、XML ファイルを読み込んでコンテンツをコア データ データベースにインポートしました。次に、SQLite ファイルをメイン バンドルに追加し、Core Data Books の例のコードを使用してインポートする 2 番目の「メイン」プロジェクトを作成します。「インポート」プロジェクトで .xcodedatamodel を変更し、ファインダーでそれを明らかにして「メイン」プロジェクトにドラッグし、そこに NSManagedObject モデル ファイルを生成しました。今まではこれでうまくいきましたが、Xcode は混乱しているようです...
最近、いくつかの属性を削除し、新しい属性を 1 つ追加しました。次に、上記と同じプロセスを実行したところ、「構造体または共用体ではないメンバー'属性名' の要求」と表示されます。記事「モデル名」と入力すると。esc を押して、インテリジェンスはまだ古い属性を取得していますか?
「インポート」プロジェクトでは、すべてが正常に機能していますが、どの属性でもエラーは発生せず、インテリジェンスは正しいですか?
アドバイスしてください、xcodeにキャッシュはありますか? 「すべてのターゲットを消去」を使用しましたが、うまくいかないようです。
ジェームズ
iphone - CoreData アプリで Shake-to-undo が機能するが、元に戻す/やり直しのプロンプトが表示されない
シェイクして元に戻す機能をサポートする CoreData ベースのアプリケーションがあります。これは現在正常に動作していますが、デバイスを振ると、NSUndoManager が通常無料で提供する通常の元に戻すプロンプトを最初に表示せずに、すぐに元に戻すことができます。
「元に戻すアーキテクチャ」ドキュメントから「iPhone での元に戻す」を読みました。
- 実装
canBecomeFirstResponder
、復帰YES
- ビューコントローラー
becomeFirstResponder
を作るviewDidAppear
- ビューコントローラー
resignFirstResponder
を作るviewDidDisappear
self.undoManager
ビューコントローラーで読み取り/書き込みとして再宣言するNSUndoManager
メソッドでand 設定self.undoManager
を作成しますUIViewController
init
(これが呼び出されることを確認しました)。- のセッターで に設定し
self.managedObjectModel.managedObjectContext.undoManager
ます。繰り返しますが、これが呼び出されていることを確認しました。これをしないと、元に戻す操作がまったく機能しません。self.undoManager
managedObjectModel
私がすでに試したトラブルシューティング:
- 元に戻すチェックは実際に機能します(管理対象オブジェクトモデルへの変更が元に戻されていることがわかります)
- 検証
canBecomeFirstResponder
が呼び出されています - 元に戻す操作中にアクセサ
self.undoManager
が呼び出されているかどうかを確認します(そうではありません)。
だから私の質問は:
- 元に戻すは機能するが、元に戻すプロンプトが表示されないのはどのような状況ですか?
- これをトラブルシューティングするために、次に何を試しますか?
ios - iPhone & Core Data - NSManagedObject を削除しますか?
管理オブジェクト コンテキストを削除しようとしていますが、オブジェクト自体を削除する代わりに、すべてのインスタント変数を null に設定します。NSManagedObjectContext のインスタンスを削除しているときに何か問題がありますか?
core-data - willTurnIntoFault が複数回呼び出され、クラッシュする
NSManagedObject
私のオーバーライドされた実装のサブクラスではwillTurnIntoFault
、問題のオブジェクトを最初に作成したコードを元に戻すときに、 が 2 回呼び出されています。これにより、キー パスで KVO の登録を二重に解除しようとすると、クラッシュが発生します。
Apple のドキュメントによると、ここが KVO の登録を解除するのに適した場所です。
ちょっとしたコンテキスト - 元に戻す操作には、モデルの対応するビューをそのスーパービューから削除することが含まれます。ビューはそのモデルを保持します。
だから私の質問は:のサブクラスで 2 回呼び出される可能性があるプログラマ エラーの種類は何ですか?willTurnIntoFault
NSManagedObject
注: 以前dealloc
はこのクラスでオーバーライドしていましたが、NSManagedObject のサブクラスには推奨されないことに気付きました。それ以来、このコードを に移動しました-didTurnIntoFault
。私は現在、Apple のドキュメントでオーバーライドしてはならないと言われている他のメソッドをオーバーライドしていません。
iphone - NSManagedObjectからサブクラス化されたクラスにメソッドを追加します
メソッドをオブジェクト(NSManagedObjectからサブクラス化)にアドしたい
しかし、その方法は使用できません
私のせいは何ですか。REMBoxの通常の(コアデータ)属性はうまく機能します。
iphone - NSManagedObjectサブクラスへのivarの追加
iPhoneのCoreDataで使用されるNSManagedObjectクラスのサブクラスがあります。ただし、そのクラスに追加したい一時的な「フィールド」(ivar)があります(ただし、データストアに保持したくありません)。非公式および公式のプロトコルを使用しようとしましたが、どちらも動作のような「静的変数」を提供します。(インスタンス変数ではなくクラス変数のように動作します)。なにか提案を?
私の最初の試みは、おそらくNSManagedObjectのサブクラスであるTest "Dummy-class"を作成し、次にTest-categoryを作成しました。
それらは通常のセッターとゲッターです。これが私がTestクラスを使用する方法です
NSManagedObjectサブクラス(私のエンティティ)を直接操作することもできますが、それがその方法だとは思いません。
core-data - 「NSManagedObject」が削除されたかどうかを確認するにはどうすればよいですか?
がNSManagedObject
削除され、その管理対象オブジェクトを含むコンテキストが保存されました。Core Data が永続ストアに次の保存操作中にオブジェクトを削除するように要求した場合、それisDeleted
が返されることを理解しています。YES
ただし、保存は既に行われているため、 をisDeleted
返しますNO
。
含まれているコンテキストが保存された後NSManagedObject
に が削除されたかどうかを確認する良い方法は何ですか?
(削除された管理対象オブジェクトを参照しているオブジェクトがまだ削除を認識していない理由を知りたい場合は、performSelectorOnMainThread:withObject:waitUntilDone:
.
iphone - 管理対象オブジェクト メソッドのシグネチャ
以下のオブジェクトを管理しています。initFruitStand メソッドの addCratesObject に対して次の警告が発生しました。署名は一致するのに一致しないと不平を言うのはなぜですか? 何が問題ですか?
関数 '-[FruitStandViewController initFruitStand:]':
「FruitStand」は -addCratesObject に応答しない場合があります:
'(一致するメソッド シグネチャのないメッセージは、'id' を返し、'...' を引数として受け入れると見なされます。)
MyViewController.m
FruitStand.h
FruitStand.m
Crates.h
Crates.m