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 它返回空值。你知道为什么吗?这个问题的根源是什么?

我的字段被定义为双精度。

4

1 回答 1

0

您是否有任何机会尝试获取您在一个线程或队列上创建的托管对象并在另一个线程或队列上使用它们?

由于托管对象不是线程安全的——实际上它们比平常更不安全,因为它们永远不能安全地离开创建它们的线程使用。

实际上,如果当您尝试在创建对象的线程/队列之外的线程/队列上访问对象时出现故障,则可能无法加载其数据。这不是您可以依赖的东西,它只是凭经验似乎是正确的,至少在 iOS 的某些版本子集中。然而,这可能是这里发生的事情吗?

解决方案是为每个线程/队列创建一个托管对象上下文,确保插入和删除在所有上下文之间传播,并通过对象 ID 将对象从一个上下文移植到另一个上下文 - 请参阅 Apple 的Concurrency with Core Data文档。

于 2012-12-17T22:31:13.217 回答