2012-12-15 5 views
0

ADN의 게시물을 내 데이터베이스에 매핑하는 데 문제가 있습니다.MagicalRecord를 사용하여 핵심 데이터의 ADN 포스트 엔티티 매핑

마침내 MagicalRecord를 사용하여 설정 한 NSManagedObjects에 JSON을 자동으로 매핑합니다.

JSON은 여기에서 확인할 수 있습니다. http://developers.app.net/docs/resources/post/, 특히 엔티티가있는 섹션.

내 핵심 데이터 모델은 다음과 같은 관계를 설정하고있다 : MagicalRecord이 잘 트리를 매핑 할 수 있어야하므로

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

관계는 적절한 이름으로 설정되었습니다. Post 객체에는 많은 속성이 있습니다. Entities 객체와의 관계를 "엔티티 (entities)"라고하며, 기본 키 (MagicalRecord의 코드에서 AFAIK가 깨지는 위치)로 인해 실패한 것입니다.

엔티티는 기본적으로 각 엔티티 유형에 관계를 보유하는 객체이기 때문에 Entity 객체에 대한 속성이 없습니다. 안타깝게도 Entity 객체의 임의의 이름을 가진 속성을 설정하는 데는 도움이되지 않는 것 같습니다.

위의 정보를 바탕으로 관계와 개체를 올바르게 매핑하기 위해 다르게 수행 할 작업이 있습니까? ADN 게시가 "엔티티"사전으로 설정된 방식과 같이 각 엔티티 유형에 대한 관계에만 사용하는이 빈 엔티티 객체를 갖는 것이 좋습니다.

미리 감사드립니다.

답변

0

그래서 NSManagedObjects 및 관계를 설정 한 방식으로 MagicalRecord와 자신에게 문제가 있습니다.

MagicalRecord는 관계를 처리하기 위해 기본 키를 사용합니다. 설정되어 있지 않은 경우는 속성의 1 개를 사용합니다.내 경우에는 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"라는 속성으로 테스트했지만, 제대로 작동하지 않았고 캐시를 지우는 데 도움이되지 않을 수도 있습니다. 나는 관계를 명확히하기 위해 다시 시도 했으므로 걱정할 사람이 없었습니다. 그런 다음 엔티티에 엔티티 "entities"를 추가했습니다. NSManagedObject 모두 훌륭했습니다!

죄송합니다. 누군가가 MagicalRecord를 사용하고 NSManagedObject가 어떤 속성도 가지고 있지 않은이 이슈를 우연히 만난다면 대답과 설명을 추가하십시오.

0

먼저, "문제"를 설명하는 것을 무시하고 시나리오 만 설명합니다. 예상대로 행동하지 않는 것은 정확히 무엇입니까?

핵심 데이터 엔티티에 대한 속성의 존재 또는 부재는 행동에 영향을 미치지 않습니다.

그러나 "엔티티"라는 이름은 내 엉뚱한 말을 어지럽히게 만듭니다. NSManagedObject에는 (공개) "엔터티"속성이나 메서드가 없지만 "엔터티"메서드가 있습니다.

업데이트 : -> 엔티티 < -

항목 < >> 푸

이 코드 : 내가 수동으로 다음과 같은 모델을 가진 새로운 코어 데이터 테스트 프로젝트 생성

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); 

및 괜찮 았어.

UPDATE : 나는 이상한 행동의 원인을 찾을 수있는 가장 가까운 것은 이것이다 :

[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"); 

로그가 인쇄됩니다 전자의 경우 잘못이다, 그리고 "is_deleted = YES" "= NO 삭제". 기존의 "isDeleted"메소드는 "deleted"속성에 대해 "deleted"접근 자의 자동 생성을 방지합니다.