Có thể RestKit kết nối một mối quan hệ mà không lưu trữ khóa ngoại như một thuộc tính, tức là trực tiếp từ đường phím trong JSON?Đối tượng RestKit Ánh xạ các mối quan hệ với các khóa ngoài
Đặc biệt, tôi đã có mối quan hệ công việc với has_many Rooms. JSON của phòng không chứa công việc, thay vào đó, cả hai đều được tải riêng:
- job: {
id: 1,
name: "John"
}
- room: {
id: 4,
job_id: 1,
name: "spare bedroom"
}
Công việc được tải trước phòng.
mô hình CoreData tôi, công việc có tính chất cho
@interface Job : NSManagedObject
@property (nonatomic, retain) NSNumber * identifier;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSSet *rooms;
@end
@interface Room : NSManagedObject
@property (nonatomic, retain) NSNumber * identifier;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) Job *job;
@end
Hiện nay tôi thêm một @property (nonatomic, strong) NSNumber *jobID;
vào phòng, mà tôi @synthesize
.
JobMapping:
mapping = [RKManagedObjectMapping mappingForClass:[Job class]];
[mapping setPrimaryKeyAttribute:@"identifier"];
[mapping mapAttributes:@"name", nil];
[mapping mapKeyPath:@"id" toAttribute:@"identifier"];
[mapping mapRelationship:@"rooms" withMapping:[Room objectMapping]];
RoomMapping
mapping = [RKManagedObjectMapping mappingForClass:[Room class]];
[mapping setPrimaryKeyAttribute:@"identifier"];
[mapping mapAttributes:@"name", nil];
[mapping mapKeyPath:@"id" toAttribute:@"identifier"];
[mapping mapKeyPath:@"job_id" toAttribute:@"jobID"];
[mapping mapRelationship:@"job" withMapping:[Job objectMapping]];
[mapping connectRelationship:@"job" withObjectForPrimaryKeyAttribute:@"jobID"];
Tôi đã tự hỏi liệu có cách nào tôi có thể thực hiện việc này mà không có thuộc tính jobID bổ sung không? Tôi không muốn có một thuộc tính jobID trong CoreData xcdatamodeld - nó thừa, vì mối quan hệ bao gồm điều đó.
Ngoài ra nếu tôi xây dựng lại NSManagedObjects, tôi cần phải thêm lại thuộc tính jobID, quá tẻ nhạt. Tôi không thể nói với Restkit để kết nối Room với Job tương ứng của nó thông qua keypath job_id trong JSON?
Nếu tôi loại bỏ các tài sản, mapKeyPath:@"job_id"
dòng, và thay đổi dòng cuối cùng để [mapping connectRelationship:@"job" withObjectForPrimaryKeyAttribute:@"job_id"];
tôi nhận được
the entity Room is not key value coding-compliant for the key "job_id".
Bạn đã tìm hiểu cách kết nối đúng đắn mối quan hệ trong Dữ liệu cốt lõi mà không cần có thuộc tính ID dự phòng bên cạnh mối quan hệ thực sự? – thejaz