問題タブ [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 - NSManagedObject を挿入せずにインスタンス化する方法はありますか?
トランザクションを挿入するためのユーザー インターフェイスがあります。ユーザーがプラスをクリックすると、画面が表示され、Core Data NSManagedObject エンティティをインスタンス化したいので、ユーザーに作業させます。次に、ユーザーが [保存] ボタンをクリックすると、保存機能が呼び出されます。
コードまで:
PS 私はそのテーブルで NSFetchedResultsController を使用していますが、NSFetchedResultsController がセクションとオブジェクトをテーブルに挿入していることがわかります。
私の考えでは、トランザクション NSManagedObject をインスタンス化する方法があれば、クライアントが選択するまで保存せずに更新できます。
core-data - NSManagedObjectModel versionIdentifiers
NSManagedObjectModel -versionIdentifiersのドキュメントによると、
Core Dataフレームワークは、モデルにデフォルトの識別子を提供しません。また、実行時にこの値に依存しません。Xcodeで作成されたモデルの場合、モデルインスペクターでこの値を設定します。
よくわかりませんが、モデル移行ポリシークラスのコーディングを行う際に、バージョン識別子を設定すると役立つと思います。Xcodeでこれらの識別子を設定する方法を知っている人はいますか?私は成功せずにかなりのことを突っ込んできました。
ありがとう。
iphone - NSManagedObject の特定の属性に対する変更の検出
の特定の属性に対する変更を検出するにはどうすればよいNSManagedObject
ですか? Core Data データ モデルには、Product
販売する製品を表すエンティティがあります。Product
エンティティにはprice
、sku
、weight
、numberInStock
、 などのいくつかの属性があります。 の属性が変更されるたびに、price
長いProduct
計算を実行する必要があります。したがって、その変更が別のスレッドに保存されたコンテキストのマージに起因する場合でも、[編集]price
の属性がいつ Product
変更されるかを知りたいです。これを行うための良い方法は何ですか? 私のストアには何千ものオブジェクトがあります。明らかに、それぞれにメッセージを送ることは現実的ではありません。Product
addObserver
変更を検出するために使用していますが、管理対象オブジェクトが変更されたことをNSManagedObjectContextObjectsDidChangeNotification
通知するだけで、そのオブジェクトのどの属性が変更されたかは通知されません。に変更があるたびに計算をやり直すことができますが、無関係な属性が変更されるたびに無駄な再計算が行われます。エンティティ(属性のみを含む)を作成し、との間の対1関係を使用することを検討しています。このようにして、計算を開始するためにオブジェクトの変更を検出できます。これは私には過度に不器用に思えます。より良い方法はありますか?Product
Price
price
Product
Price
Price
アップデート:
changedValues
@railwayparade は、 のメソッドを使用しNSManagedObject
て、更新されたオブジェクトごとに変更されたプロパティを特定できることを指摘しました。私はその方法を完全に見逃していました。変更がバックグラウンド スレッドで行われておらず、メイン スレッドのコンテキストにマージされていなければ、問題は完全に解決されます。(次の段落を参照してください。)
NSManagedObjectContextObjectsDidChangeNotification
私はその仕組みについての微妙な点を完全に見逃していました。私が知る限り、別のスレッドに保存されたマネージド オブジェクト コンテキストが (を使用してmergeChangesFromContextDidSaveNotification:
) メイン スレッドのコンテキストにマージされると、結果には現在メイン スレッドのマネージド オブジェクト コンテキストにあるオブジェクトに関する変更情報NSManagedObjectContextObjectsDidChangeNotification
のみが含まれます。変更されたオブジェクトがメイン スレッドのコンテキストにない場合、それは通知の一部にはなりません。それは理にかなっていますが、私が予想していたものではありませんでした。したがって、より詳細な変更情報を取得するために属性の代わりに対 1 関係を使用するという私の考えでは、実際にはNSManagedObjectContextDidSaveNotification
メイン スレッドではなく、バックグラウンド スレッドの を調べる必要がありますNSManagedObjectContextObjectsDidChangeNotification
。もちろん、単に次のchangedValues
方法を使用する方がはるかに賢明です。NSManagedObject
@railwayparade が有益に指摘したように。ただし、メイン スレッドでのマージからの変更通知に、バックグラウンド スレッドで行われたすべての変更が含まれているとは限らないという問題がまだ残っています。
iphone - コア データ: 属性にアクセスするには 2 つの異なる方法がありますが、機能するのは 1 つだけです
次のコードでは、下の行の前にある 2 つのコメントのうち、最初の行だけが機能します。
2回目のリターンとエラー
iphone - データベースへのコアデータの保存が機能しない
私はiPhoneのCoreDataユーザー/学習者としては初めてですが、これ[managedObjectContext save:$error]
はPersistantStoreへの変更を保存するために使用されたと思いました。
しかし、リロードしてNSFetchを呼び出すと、オブジェクトはまだそこにあります。なぜ何かアイデアはありますか?
iphone - insertNewObjectForEntityForName が間違った型を返す
自分のタイプのエンティティを挿入しようとしているにもかかわらず、なぜinsertNewObjectForEntityForName
戻ってくるのかを理解しようとして、ここ数時間髪を引っ張っています。NSManagedObject
私が何千回もチェックしたこと:
- ダイアグラム デザイナーでクラス名が正しい値に設定されている
- エンティティは別のエンティティと多対多の関係を持ち、他のエンティティが期待どおりに機能し、適切に型付けされた出力が得られます。それらは同一であることを誓います
これが発生する可能性のある理由は何ですか? ここからどこを見ればいいのかわからず、Googleはあまり役に立ちませんでした:(
編集(解決済み):
これはバージョン管理と関係がありました...データモデルを削除して再作成したところ、以前に使用されていたいくつかのバージョンが存在する前に、すべてが機能し始めました...ため息時々質問をすると、解決
今は解決したとはいえ、なぜそれが起こったのか、私はまだ混乱しています
core-data - NSManagedObject サブクラス間で一見一貫性のない動作
NSManagedObject のサブクラスがいくつかあります。それらはすべて、次のようなコードでインスタンス化されます。
またはこのように:
ただし、奇妙なのは(上記のコードから)
「NSManagedObject」を出力しますが、
「実験」を出力します。
これがなぜなのか誰か知っていますか?私の他の NSManagedObject サブクラスとは異なり、MeasurementDescriptor には ivar がありません (Core Data プロパティは含まれません)。ivar を追加しても何も変わりませんでした。同様に、MeasurementDescriptor は、「関係」プロパティを持たない唯一の NSManagedObject サブクラスです。ひょっとして、これがこの異様さの理由なのだろうか…???
iphone - NSManagedObjectID を手動で設定するには?
iPhone の Core Data を Sinatra サーバーの MongoDB と同期したい。
iPhone が Node.js チャット サーバーからメッセージを取得すると、メッセージには送信者の BSON ObjectId (文字列) が含まれます。iPhone がこのメッセージを保存するために、Core Data で同じ ID を持つユーザーを見つけます。のようなことができるようになりたいですobjectWithID
。つまり、NSManagedObjectID を MongoDB BSON ObjectId と同じに設定したいと考えています。他に確認することは、managedObjectContext に送信者の ID を持つユーザーがいない場合、persistentStore からそのユーザーを取得し、存在しない場合は作成します。Message と Sender の間の関係を維持するためだけに、これを行うには多くの作業が必要です。たぶん、Message オブジェクトの送信者属性を、User NSManagedObject としてではなく、文字列として BSON ObjectId として保存する必要があります。
おすすめは何ですか?iPhoneでもMongoDBを使用する必要がありますか? そのためのObjective-Cドライバーがあることに気づきました。しかし、私は Core Data のコツをつかみ始めたばかりで、使いたくなるクールなもの (元に戻すサポートなど) があります... 今は、単純なフェッチと永続的なストレージに使用しているだけなので、それを置き換えることができます。しかし、私はそれが良いユーザビリティだと思うという理由だけで、将来的にアンドゥのサポートを実装する予定です. 確認のポップアップに答える必要があるよりも、元に戻すオプションの方が好きです。たとえば、GMail でメッセージの送信を元に戻したり、メッセージの削除を元に戻したりできる方法が気に入っています。
ありがとう!
マット
objective-c - 管理されていないプロパティを持つ管理対象オブジェクトに障害が発生する可能性はありますか?
Core Dataのドキュメントには、必要に応じてオブジェクトがメモリを節約できない可能性があると記載されています。管理プロパティではないプロパティを持つオブジェクトがある場合はどうなりますか?
たとえば、NSManagedObjectのサブクラスであるDepartmentクラスがあるとします。場所はiVar+アクセサーです。locationプロパティはDepartmentの属性ではありません。管理されておらず、永続化されることはありません。
Departmentオブジェクトの配列、またはDepartmentと1対1の関係にあるEmployeeオブジェクトがある場合、Departmentに障害が発生する可能性はありますか?Department.locationを設定した場合、その場所が常にそこにあることを確認できますか、それとも、Departmentに障害が発生して、場所に保存されている値が失われる可能性がありますか?
iphone - フェッチ要求中にコアデータにTo-Many関係の「多くの」部分をソートさせることは可能ですか?
Core Dataを使用して適切な量の情報をキャッシュしており、管理対象オブジェクト間にTo-Many関係を設定しています。当然、私はNSFetchRequestを使用して、その関係の特異な側の配列をフェッチします。ただし、リレーションシップの「多」側を使用してUITableViewにデータを入力し、データをプルするときにアルファベット順に並べ替えたいと思います。
よくわからない場合は、次の例をご覧ください。
「employee」と「boss」はどちらもTo-Many関係のNSManagedObjectsです。各ボスには多くの従業員がいますが、従業員には1人のボスしかいません。ボスの配列を取得した後、従業員のリストを含むUITableViewControllerをプッシュします。NSFetchRequest中に従業員を事前に並べ替えて、表示しやすくしたいと思います。これは可能ですか、そしてどうすればそれを行うことができますか?