2012-09-05 145 views
0

我試圖訪問一個像這樣的變形芯數據對象的屬性:核心數據可轉換屬性

MainObject *localObject = [self.myArray objectAtIndex:indexPath.row]; 
TransformableObject *actualObject = localObject.transformableObject; 

這工作得很好。我NSLogactualObject並得到正確的鍵/值對:

actualObject:{ 

    property = "Foo"; 
    property2 = "Apple"; 
} 

然而,當我我嘗試:

NSLog (@"property:%@",actualObject.property)我得到-[__NSCFDictionary property]: unrecognized selector sent to instance

我在做什麼錯?在我的核心數據類,我有:

@interface MainObject : NSManagedObject 

@property (nonatomic, retain) TransformableObjectClass *transformableObject; 

編輯: 下面是如何設置的對象在覈心數據

 MainObject *event = (MainObject *)[NSEntityDescription insertNewObjectForEntityForName:@"MainObject" inManagedObjectContext:[AppDelegateMy managedObjectContext]]; 
     [event setValuesForKeysWithDictionary:[myArrray objectAtIndex:i]]; 
+0

最初如何設置'localObject.transformableObject'的值?在您的模型中如何配置屬性? 'actualObject'顯然是一個'NSDictionary',但是你沒有給我們足夠的信息來推論爲什麼。 –

+0

TransformableObjectClass是另一個Core Data NSManagedObject類。 – Eric

+0

可能是這樣,但錯誤顯示實際分配給該屬性的實例是'NSDictionary'的實例。那麼,它是如何到達那裏的? –

回答

1

無論-setValuesForKeysWithDictionary:也不核心數據是足夠神奇,使這項工作沒有一些更你的努力。現在,您只需將JSON響應中的字典分配給新的託管對象的transformableObject屬性即可。如果你試圖保存你的上下文,我的猜測是它可能會失敗。如果你想讓這些字典變成實際的TransformableObjectClass實例,你需要自己做。

如果您的應用中有很多類似的東西,您可能需要查看RestKit或其他開源JSON到對象映射庫(如ClassMapper)之一。

+0

它可以很好地保存,以及爲什麼我可以訪問上面的actualObject作爲NSManagedObject的屬性,如果-setValuesForKeysWithDictionary不工作? – Eric

+1

它工作正常。它只是沒有做你的想法。在Objective-C中,指針類型比描述性更具描述性。如果你把一個字典放到那個屬性中而不是你聲明的那個類中,運行時就不會抱怨。但是,如果您嘗試向該字典發送不支持的消息,它會崩潰。就像你看到的一樣。 –

+0

你可以發佈模型配置的屏幕截圖嗎?特別是有問題的屬性的屬性? –