2012-12-15 44 views
0

我有一個問題,將來自ADN的帖子映射到我的數據庫中。使用MagicalRecord在覈心數據中映射ADN Post實體

請記住我正在使用MagicalRecord來自動將JSON映射到我設置的NSManagedObjects。

JSON可以在這裏看到:http://developers.app.net/docs/resources/post/,特別是具有實體的部分。

我的核心數據模型已經創建了以下關係:

Post <-> Entities <->> Links/Hashtags/Mentions 

之間的關係是建立以適當的名稱,以便MagicalRecord應該能夠映射下樹就好了。 Post對象具有一組屬性。它與實體對象的關係被稱爲「實體」,這是由於主鍵(AFAIK在MagicalRecord中的代碼中斷的地方)而失敗的原因。

由於實體基本上只是一個持有與每個實體類型關係的對象,所以我沒有任何實體對象的屬性。不幸的是,它似乎沒有幫助爲Entity對象設置一個具有隨機名稱的屬性。

基於上述信息,有沒有什麼你會做不同的事情來正確映射關係和對象?是否可以將這個空的Entities對象用於與每個實體類型的關係,以及如何使用「實體」字典設置ADN帖子。

在此先感謝!

回答

0

所以這個問題確實與我自己設定NSManagedObjects和關係的方式有點相似。

MagicalRecord使用主鍵來處理關係。如果沒有設置,則使用其中一個屬性。在我的情況下,Entities NSManagedObject沒有任何屬性,因爲我只是用它來處理與每個實體類型的關係。

的代碼爲這可以在NSObject+MagicalDataImport.m找到:

- (NSString *) MR_lookupKeyForRelationship:(NSRelationshipDescription *)relationshipInfo 
{ 
    NSEntityDescription *destinationEntity = [relationshipInfo destinationEntity]; 
    if (destinationEntity == nil) 
    { 
     MRLog(@"Unable to find entity for type '%@'", [self valueForKey:kMagicalRecordImportRelationshipTypeKey]); 
     return nil; 
    } 

    NSString *primaryKeyName = [relationshipInfo MR_primaryKey]; 

    NSAttributeDescription *primaryKeyAttribute = [[destinationEntity attributesByName] valueForKey:primaryKeyName]; 
    NSString *lookupKey = [[primaryKeyAttribute userInfo] valueForKey:kMagicalRecordImportAttributeKeyMapKey] ?: [primaryKeyAttribute name]; 

    return lookupKey; 
} 

具體地說[[destinationEntity attributesByName] valueForKey:primaryKeyName];返回零。

起初我用一個名爲「test」的屬性進行了測試,但我不確定我做了什麼沒有工作,可能沒有做好清理緩存的工作。我再次嘗試清除關係,所以我沒有那些擔心,然後我在實體NSManagedObject上添加了一個屬性「實體」,這一切都很好!

對不起。只要添加答案和評論以防萬一有人遇到這個問題,他們使用MagicalRecord和NSManagedObject就沒有任何屬性。

0

首先,你忽略了描述你的「問題」,只是你的情況。什麼是不符合你的期望?

核心數據實體上存在或缺乏屬性不會影響其行爲。

然而,「實體」這個名字讓我的spidey感到興奮。雖然NSManagedObject沒有(public)「entities」屬性或方法,但它確實有一個「entity」方法。

更新:我手動創建以下模型一個新的核心數據測試項目:

項目< - >實體< - >>富

和驗證碼:

NSManagedObjectContext *moc = [self managedObjectContext]; 
NSManagedObject *item = [NSEntityDescription insertNewObjectForEntityForName:@"Item" 
                 inManagedObjectContext:moc]; 
NSManagedObject *ent = [NSEntityDescription insertNewObjectForEntityForName:@"Entities" 
                inManagedObjectContext:moc]; 
NSManagedObject *foo = [NSEntityDescription insertNewObjectForEntityForName:@"Foo" 
                inManagedObjectContext:moc]; 

[item setValue:ent forKey:@"entities"]; 
[foo setValue:ent forKey:@"entities"]; 

NSLog(@"%@ -> %@ -> %@", item, ent, foo); 

和它工作得很好。

更新:我可以找到導致怪異的行爲最接近的事是這樣的:

[item setValue:@(YES) forKey:@"deleted"]; 
[item setValue:@(YES) forKey:@"is_deleted"]; 

NSLog(@"deleted=%@", [[item valueForKey:@"deleted"] boolValue] ? @"YES" : @"NO"); 
NSLog(@"is_deleted=%@", [[item valueForKey:@"is_deleted"] boolValue] ? @"YES" : @"NO"); 

日誌將打印「刪除= NO」和「IS_DELETED = YES」,這是不對的前一種情況。預先存在的「isDeleted」方法可以防止自動生成「已刪除」屬性的「已刪除」訪問器。

相關問題