0

コアデータオブジェクトに奇妙な問題があります。

私はこのオブジェクトを持っています:

2012-12-17 20:20:54.756 test[8581:c07] <NSManagedObject: 0xaa52ef0> (entity: Card; id: 0xaa4ec40 <x-coredata://CF3F8F22-FE94-452E-9BFB-D4216847C8D4/Card/p14> ; data: {
    chlore = 0;
    "continue_filtering" = 1;
    "created_at" = "2012-12-01 09:55:05 +0000";
    customer = "0x7533700 <x-coredata://CF3F8F22-FE94-452E-9BFB-D4216847C8D4/Customer/p1>";
    "cyanuric_acid" = 9;
    date = "2012-12-01 00:00:00 +0000";
    "electricity_day_used" = 67;
    "electricity_night_used" = 67;
    "end_time" = "2012-12-01 10:54:00 +0000";
    "filtering_end" = "2000-01-01 09:54:00 +0000";
    "filtering_start" = "2000-01-01 09:54:00 +0000";
    furniture = 1;
    "furniture_to_get" = "";
    heater = 0;
    id = 39;
    miscellaneous = Zer;
    ph = "7,2";
    "regulation_temperature" = 56;
    "start_time" = "2012-12-01 10:54:00 +0000";
    "treatment_anti_algae" = 5;
    "treatment_auto_stop_filling" = 0;
    "treatment_chlore" = 5;
    "treatment_filling_start" = 0;
    "treatment_floculant" = 0;
    "treatment_hypo_stick" = nil;
    "treatment_hypochlorite" = 5;
    "treatment_pebble" = 5;
    "treatment_ph_less" = 5;
    "treatment_ph_plus" = 5;
    "updated_at" = "2012-12-01 09:55:05 +0000";
    "water_quality" = "Eau bleue limpide";
    "water_used" = 56;
    works =     (
    );
})

しかし、card.treatment_ph_lessを実行すると、nullが返されます。理由はわかりますか?この問題の原因は何でしょうか?

私のフィールドはdoubleとして定義されています。

4

1 に答える 1

0

万が一、あるスレッドまたはキューで作成した管理対象オブジェクトを取得して、別のスレッドまたはキューで使用しようとしていますか?

管理対象オブジェクトはスレッドセーフではないため、実際、作成されたスレッドから離れて使用することは決して安全ではないという点で、通常よりも安全ではありません。

実際には、オブジェクトが作成されたスレッド/キュー以外のスレッド/キューでオブジェクトにアクセスしようとしたときにオブジェクトに障害が発生した場合、そのデータのロードに失敗する可能性があります。それはあなたが信頼できるものではありません、少なくともiOSのバージョンのいくつかのサブセットでは、それは経験的に真実であるように思われます。しかし、それがここで起こっていることである可能性はありますか?

解決策は、スレッド/キューごとに管理対象オブジェクトコンテキストを作成し、挿入と削除がすべてのコンテキスト間で伝播し、オブジェクトIDを介してオブジェクトをあるコンテキストから別のコンテキストに移植することです。Appleの「CoreDataとの同時実行」のドキュメントを参照してください。

于 2012-12-17T22:31:13.217 に答える