저는 RestKit (0.9.3)을 사용하여 내 핵심 데이터를 채울 수있었습니다. 엔티티 객체는 올바르게 생성되지만 그것들 사이의 관계는 생성되지 않습니다. 내가 말할 수있는 건, 내가 제대로 따라 가지 설정이 다음 예에서관계가 코어 데이터 및 RestKit과 연결되지 않았습니다.
- https://github.com/RestKit/RestKit/wiki/Object-mapping
- 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을 사용했다 단순히이었다. 내일 (다른 사람을 도울 수 있기를 대비하여) 자세한 내용을 게시 할 예정입니다.
안녕하세요, @ johnytmc, Reskit 및 coredata에 대한 완전하고 실제적인 튜토리얼 링크를 게시 할 수 있습니까? Google은 비 실제적인 자습서 만 제공합니다. 감사! – Darmen