我有一個應用程序在表中有很多數據,而且我正在編寫一個獲取一小部分數據的移動應用程序。表中的數據使用ID作爲關係,我試圖將它加載到核心數據模型中並保留關係。從現有的數據庫ID關係中加載核心數據關係
但似乎沒有一種簡單的方法可以告訴Core Data,「對於這種關係,我需要一個外鍵給這個其他表。」相反,我有這個怪物(這是隻有六的一個異步RestKit查詢的簡化版本,都回來了填充數據庫):
[manager postObject:nil path:@"api/shiftservice/get" parameters:@{@"workerIds": @[@1]} success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
NSLog(@"Loaded shifts: %d", [[mappingResult array] count]);
NSManagedObjectContext *context = [AppDelegate managedObjectContext];
NSSet *positions = [context fetchObjectsForEntityName:@"NWPosition"];
NSDictionary *positionDict = [NSMutableDictionary new];
for (NWPosition *position in positions) [positionDict setValue:position forKey:position.positionId.stringValue];
NSSet *workers = [context fetchObjectsForEntityName:@"NWWorker"];
NSDictionary *workerDict = [NSMutableDictionary new];
for (NWWorker *worker in workers) [workerDict setValue:worker forKey:worker.workerId.stringValue];
NSSet *shifts = [context fetchObjectsForEntityName:@"NWShift"];
for (NWShift *shift in shifts)
{
NWPosition *position = [positionDict valueForKey:shift.positionId.stringValue];
position.shifts = [context fetchObjectsForEntityName:@"NWShift" withPredicateFormat:@"positionId = %d", position.positionId];
shift.position = position;
NSSet *tradesAsGetShift = [context fetchObjectsForEntityName:@"NWTrade" withPredicateFormat:@"getShiftId = %@", shift.shiftId];
for (NWTrade *trade in tradesAsGetShift) trade.getShift = shift;
shift.tradesAsGetShift = tradesAsGetShift;
NSSet *tradesAsGiveShift = [context fetchObjectsForEntityName:@"NWTrade" withPredicateFormat:@"giveShiftId = %@", shift.shiftId];
for (NWTrade *trade in tradesAsGiveShift) trade.giveShift = shift;
shift.tradesAsGiveShift = tradesAsGiveShift;
NWWorker *worker = [workerDict valueForKey:shift.workerId.stringValue];
worker.shifts = [context fetchObjectsForEntityName:@"NWShift" withPredicateFormat:@"workerId = %d", worker.workerId];
shift.worker = worker;
}
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
NSLog(@"Failed to load shifts with error: %@", [error localizedDescription]);
}];
我用馬特加拉格爾的單行的修改版本請致電http://www.cocoawithlove.com/2008/03/core-data-one-line-fetch.html獲取fetchObjectsForEntityName
。
無論如何,這對我來說似乎非常可怕,就像我錯過了一些明顯的東西。有什麼方法可以告訴Core Data關於數據庫風格的外鍵嗎?有沒有簡單的方法來填充它們,如果沒有?因爲爲每一個實體做這麼多提取並不是正確的做法。如果RestKit在這裏提供幫助,那就更好了。
RestKit應該處理外鍵(核心數據不)。顯示您收到的JSON和您擁有的映射。您是否將外鍵關係添加到映射中? – Wain