問題タブ [managedobjectcontext]
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.
ios - Core Data を使用する場合、非管理オブジェクト クラスとその管理オブジェクト バージョンを保持しますか?
コア データを扱うとき、マネージド オブジェクトではないモデル クラスを持つ価値があるかどうか、常に疑問に思っていました。これらのオブジェクトに永続性を与える代わりに、コア データ ストアを処理するデータ マネージャー クラスが、クラス (複数可) のインスタンスをコア データストアに書き込む方法を知っている場合、アプリがそれらのインスタンスを永続性から呼び戻したい場合、データストア管理オブジェクト コンテキストなしでこれらのオブジェクトのインスタンスを作成するメソッドを持っていますか?
私がコア データを扱う方法を学んだのは、xCode が提供するマネージド オブジェクト モデルを使用してモデル クラスを作成し、それらのクラスのインスタンスを作成または破棄するたびに、それらを通常の種類のオブジェクト インスタンスではなく、マネージド オブジェクトとして扱うことです。他のほとんどのクラスが作成します。管理対象オブジェクトを変更する必要があるときはいつでも、管理対象オブジェクトのコンテキストを介して行う必要があるため、これはやや複雑で難しいと常に感じていました。これは結局のところ単なるデータベースです。
質問がわかりにくい場合は申し訳ありません。明確化が必要な場合は、喜んで承ります。Core Data について議論するのはやや難しいと思います。
xcode - コアデータ関係による属性値の変更
別のエンティティと「1 対多」の関係にあるエンティティに格納されている値を更新するのに苦労しています。
私のプロジェクトは予算管理アプリです。NSFetchedResultsController を使用して、トランザクション (テーブルに入力される) を正常に追加し、FRC が自動的に保存するトランザクションを削除できます。
属性「name」と「amount」を持つトランザクションを格納するエンティティがあり、トランザクションの日付を格納する 1 つの属性「theDate」(NSDate) を持つ別のエンティティがあります。
別の理由は、これにより組織的にシンプルになり、多くのトランザクションが同じ日に発生する可能性があると私が信じていたからです。
以下では、エンティティを作成し、新しいトランザクションを作成した後に値を保存してから、関係を設定します。
上記のすべてが正常にelse動作します。Afterelseセル (トランザクション) が編集対象として選択された場合にトリガーされます。この行: updatedObject.setValue(newDate, forKey: "date")TransDates エンティティの "theDate" 属性を単純に更新することを意図していました ("date" は関係の名前です)。しかし、なぜそれがうまくいかないのかがわかりました。
だから私はelseステートメントでこれを試しました:
上記は単純にすべての TransDates オブジェクトの配列を返し、一致が見つかった場合 (配列の内容と新しい NSDate の両方) に updatedObject が追加されると考えました。それ以外の場合は、いくつかのコードを追加して新しい NSManagedObject としての newDate など。
ただし、if dateObject.valueForKey("theDate") as! NSDate == newDate {これを実行すると、「致命的なエラー: オプション値のラップ解除中に予期せず nil が見つかりました」が発生します。
私の2つの質問:
トランザクションに関連付けられている日付の更新/変更を達成しようとしているという点では (日付が既に存在し、他のトランザクションが含まれている場合、このトランザクションは移動してそれらに参加するだけです)、これが最善の方法ですか? ?
私は関係の目的/機能をすべて間違っていますか?
この長々とした質問で申し訳ありませんが、私はここで何日も立ち往生しています。それでは、よろしくお願いします!
swift - Swift - インデックス番号で navigationController の viewController を参照する
このコードは、私が求めていることを示しています:
rootViewControllerと の2 つの画面を持つ単純なアプリの場合TableViewController、は のrootVCインデックス [0] にnavigationControllerあり、次のビューはインデックスを 1 ずつ増やします。
今、私はの背後にあるViewControllersに渡そうとmanagedObjectContextしています:appDelegaterootViewController
中央のビューはです。次に、その上下の画面rootViewControllerに渡したいと思います。managedObjectContext
appDelegateからにrootViewController渡し、次に から次のビューに渡そうとしrootViewControllerましたが、うまくいきません。
同じビューに続くビューのインデックス番号を知る方法を教えてください。ありがとうございました!
sqlite - 必要なときにコアデータが保存されない
医療記録を保存するアプリを開発しています。単一のコンテキストと単一の物理ストアでコア データを使用しています。[managedObjectContext save:&error] を呼び出したにもかかわらず、Xcode 経由でコンテナーを抽出すると、sqlite db に最新のデータが表示されません。
ここで提案されているようなことを試してみました: Core data not Saving my dataですが、うまくいきませんでした。さらに悪いことに、しばらくするとデータが表示されます。アプリは FTP 経由で sqlite を送信して、災害復旧用のデータをダンプできます。先週分の作業が常に表示されるとは限りませんが、通常は 1 週間後の作業が表示されます。
私が理解できないのは、[managedObjectContext save:&error] は物理ストアにデータをすぐに書き込むのですか? (私の推測では NO です) その場でデータを書き留めてほしいとコア データに伝えるにはどうすればよいですか (それが実際に可能である場合)。アプリを閉じるか、デバイスを再起動すると、コア データが sqlite に書き込まれますか?
編集 1 - いくつかのコードを追加する [managedObjectContext save:&error] は、[CommonHelper SaveData:true]; 内で呼び出されます。@try ブロックの先頭に。
ios - NSManagedObject を ManagedObjectContext に再挿入する
データを保持して渡すためだけに、有効なコンテキストなしで作成した NSManageObect のインスタンスがあります。
しかし、Core Data によって実際に追跡 (保存) できると便利な場合もあります。これらのインスタンスでは、次のようにして、それをコア データ管理対象オブジェクト コンテキストに追加します。
これはすべてうまくいきます。
私の質問は、myManagedContext への同じ参照を数回再挿入するかどうかが実際に問題になるかどうかです。この再挿入の欠点はありますか? 私の考えでは、同じオブジェクト参照を挿入しているため、違いはありません。
ios - コンテキストの保存により、テーブル ビューに新しいエントリが追加されます
別のView Controllerを呼び出しているところからtableviewcontrollerがあります。この新しいコントローラーは、選択したテーブル ビュー セルにオブジェクトを設定します。新しいView Controllerでは、スイッチの変更をキャプチャしています。スイッチがオンになると、テーブルビューから送信されたのと同じオブジェクトのコアデータにスイッチの状態を保存します。
以下は、新しいView Controllerを呼び出すコードです.segueは「ShowDetails」です
以下は、スイッチの状態がオフからオンに変わるときのコードです。
ここで books は、 func prepare を使用して tableviewcontroller から渡されるコア データ エンティティであるタイプ BooksDetail の var です。
私の問題は、books?.managedobjectcontext.save()が変更されたデータを保存することですが、アプリを閉じて再度開くと (完全に強制終了すると)、更新されたデータでテーブル ビューに新しいエントリが作成されます。アプリを強制終了しないと、すべてが正常に機能し、選択したセルが正しく更新されます。これは、既存のオブジェクト属性を更新する正しい方法ですか?.
