2011-10-27 3 views
1

저는 RestKit (0.9.3)을 사용하여 내 핵심 데이터를 채울 수있었습니다. 엔티티 객체는 올바르게 생성되지만 그것들 사이의 관계는 생성되지 않습니다. 내가 말할 수있는 건, 내가 제대로 따라 가지 설정이 다음 예에서관계가 코어 데이터 및 RestKit과 연결되지 않았습니다.

  1. https://github.com/RestKit/RestKit/wiki/Object-mapping
  2. RKRelationshipMappingExample 그래서

폴더, 여기에 내가로부터 다시 받고있어 JSON의 샘플입니다 서버 :

{ 
    "artist" : { 
    "artistId" : 123, 
    "artistName" : "The Artist", 
    "albums" : [ 
     { 
     "albumPrice" : 12.99, 
     "albumId" : 456, 
     "trackCount" : 12, 
     "albumName" : "Album Title", 
     }, 
     { 
     "albumPrice" : 10.99, 
     "albumId" : 789, 
     "trackCount" : 10, 
     "albumName" : "Another Album Title", 
     } 
    ] 
    } 
} 

그리고 나는 다음과 같은 두 가지 관리 객체를 채울 RestKit을 사용하고 있습니다 :

,
@interface Artist : NSManagedObject 
@property (nonatomic, retain) NSNumber * artistId; 
@property (nonatomic, retain) NSString * artistName; 
@property (nonatomic, retain) NSSet *albums; 
@end 
@interface Artist (CoreDataGeneratedAccessors) 
- (void)addAlbumsObject:(Album *)value; 
- (void)removeAlbumsObject:(Album *)value; 
- (void)addAlbums:(NSSet *)values; 
- (void)removeAlbums:(NSSet *)values; 
@end 

@interface Album : NSManagedObject 
@property (nonatomic, retain) NSNumber * albumId; 
@property (nonatomic, retain) NSString * albumName; 
@property (nonatomic, retain) NSNumber * albumPrice; 
@property (nonatomic, retain) NSNumber * trackCount; 
@property (nonatomic, retain) NSManagedObject *artist; 
@end 

RestKit을 사용하여 다음 구성을 설정했으며 3 개의 핵심 데이터 항목 (하나의 아티스트와 두 개의 앨범)을 만들 예정입니다. 아티스트 엔티티에는이 두 앨범 세트 여야하는 "앨범"관계가 있습니다. 이 후

RKObjectManager *objectManager = [RKObjectManager sharedManager]; 
[objectManager loadObjectsAtResourcePath:@"/artist/123/albums" delegate:self]; 

가 내 핵심 데이터 저장소가 세 개의 오브젝트 (하나 명의 아티스트와 두 앨범)으로 채워집니다 실행되지만 : 다음

// Initialize our RestKit singleton 
RKClient *client = [RKClient clientWithBaseURL:API_URL]; 

// Initialize for Object mapping 
RKObjectManager* objectManager = [RKObjectManager objectManagerWithBaseURL:API_URL]; 
objectManager.objectStore = [RKManagedObjectStore objectStoreWithStoreFilename:@"AppName.sqlite"]; 

// Configure ALBUM mapping 
RKManagedObjectMapping* albumMapping = [RKManagedObjectMapping mappingForClass:[Album class]]; 
albumMapping.primaryKeyAttribute = @"albumId"; 
[albumMapping mapKeyPath:@"albumId" toAttribute:@"albumId"]; 
[albumMapping mapKeyPath:@"albumName" toAttribute:@"albumName"]; 
[albumMapping mapKeyPath:@"albumPrice" toAttribute:@"albumPrice"]; 
[albumMapping mapKeyPath:@"trackCount" toAttribute:@"trackCount"]; 

// Configure ARTIST mapping 
RKManagedObjectMapping* artistMapping = [RKManagedObjectMapping mappingForClass:[Artist class]]; 
artistMapping.primaryKeyAttribute = @"artistId"; 
[artistMapping mapKeyPath:@"artistId" toAttribute:@"artistId"]; 
[artistMapping mapKeyPath:@"artistName" toAttribute:@"artistName"];  
[artistMapping mapKeyPath:@"albums" toRelationship:@"albums" withMapping:albumMapping]; 

// Register mappings with the provider 
[[RKObjectManager sharedManager].mappingProvider setMapping:albumMapping forKeyPath:@"albums"]; 
[[RKObjectManager sharedManager].mappingProvider setMapping:artistMapping forKeyPath:@"artist"]; 

그리고

나중에 내 프로그램에서, 나는 데이터를로드 그들 사이의 관계는 만들어지지 않습니다.

결과적으로이 앨범 목록을 직접 가져올 수 있거나 아티스트를 직접 가져올 수 있습니다. 하지만 사용하려고하면 : artist.albums 결과가 비어 있습니다.

누구든지 내가 잘못하고 있거나 더 이상 문제를 해결할 수있는 방법에 대한 제안을 제공 할 수 있습니까?

고마워요.

편집 : 업데이트 10/26

난 그냥 설정이 동일한 구성으로 작은 샘플 프로젝트와 모든 것이 (이 앨범의에 즉 작가 엔티티 관계로 작성된)를 제대로 넣었했다. 슬프게도, 이것은 내가 이전에 대략적으로 설명한 것보다 큰 프로젝트에서 문제가된다는 것을 의미합니다. 그렇게 말하면서 계속해서 터벅 터벅 걷고 업데이트 할 것입니다. 따라서 누군가가이 문제를 해결하는 방법에 대한 조언을하거나 특별히 살펴볼 부분이 있다면 크게 감사하겠습니다.

편집이 : 곤란하게

를 해결, 문제는 내가 잘못된 기본 URL을 사용했다 단순히이었다. 내일 (다른 사람을 도울 수 있기를 대비하여) 자세한 내용을 게시 할 예정입니다.

+0

안녕하세요, @ johnytmc, Reskit 및 coredata에 대한 완전하고 실제적인 튜토리얼 링크를 게시 할 수 있습니까? Google은 비 실제적인 자습서 만 제공합니다. 감사! – Darmen

답변

1

음 ... 우리는 해결책이 있습니다. 문제는 단순히 내 기본 프로젝트에서 잘못된 기본 URL을 사용하고 있었다는 것이 당혹 스럽다. API의 로컬 사본에서 반환 된 JSON에 대한 일부 업데이트를 만들었지 만 기본 URL은 여전히 ​​API 온라인 사본을 가리키고 있습니다.

내가 만든 변경 사항은 JSON에서 "아티스트"와 "앨범"을 별도의 엔티티가 아닌 JSON을이 형식으로 변경 한 것입니다.

관련 문제