属性使用核心数据返回null

时间:2012-12-17 19:26:57

标签: objective-c ios5 ios6 restkit

我对核心数据对象有一个奇怪的问题。

我有这个对象:

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。你知道为什么吗?这个问题可能是什么原因?

我的字段定义为双。

1 个答案:

答案 0 :(得分:0)

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

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

实际上,如果某个对象在您尝试在其创建的线程/队列之外的线程/队列上访问它时是一个错误,那么它很可能无法加载其数据。这不是你可以依赖的东西,它只是在经验上似乎是真的,至少在iOS的某些子集中。然而,这可能是这里发生的事情吗?

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