#iphone #objective-c #core-data #restkit
#iPhone #objective-c #core-data #restkit
Вопрос:
я использую coredata и restkit для сопоставления данных.
вот ответ json для вызова getsales
{ "success":true,
"sales" : [
{
"brands" :[
{"id":"637", "name":"XYZ"},
{"id":"638", "name":"abc"}
]
"end_date" = "2011-10-14 12:00:00",
"id" = 3794,
"image" = "http://dummy.something.com.jpg",
"name" = "test",
},
{
"brands" =[
{"id":"640", "name":"abc"}
],
"end_date" = "2011-10-14 12:00:00",
"id" = 3766,
"image" = "http://dummy.something.com.jpg",
"name" = "text2",
},
{
"brands" =[
{"id":"641", "name":"XYZ"},
{"id":"642", "name":"abc"},
{"id":"643", "name":"def"}
],
"end_date" = "2011-11-06 12:00:00",
"id" = 3798,
"image" = "http://dummy.something.com.jpg",
"name" = "test3",
}
]
}
у меня есть
@interface Sale : NSManagedObject{
}
@property (nonatomic, retain) NSNumber * ID;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSDate * endDate;
@property (nonatomic, retain) NSString * imageUrl;
@implementation Sale
@dynamic ID;
@dynamic name;
@dynamic startDate;
@dynamic endDate;
@dynamic imageUrl;
Я пытаюсь отобразить ответ следующим образом
- (void)getSales{
RKObjectManager* objectManager = [RKObjectManager objectManagerWithBaseURL:@"http://baseurl.com"];
RKManagedObjectStore* objectStore = [RKManagedObjectStore objectStoreWithStoreFilename:@"base.sqlite"];
objectManager.objectStore = objectStore;
RKManagedObjectMapping* saleMapping = [RKManagedObjectMapping mappingForClass:[Sale class]];
[saleMapping mapKeyPathsToAttributes:
@"id", @"ID",
@"name", @"name",
@"start_date",@"startDate",
@"end_date", @"endDate",
@"image", @"imageUrl",
nil];
saleMapping.primaryKeyAttribute = @"ID";
[[RKObjectManager sharedManager].mappingProvider setMapping:saleMapping forKeyPath:@"sales"];
[[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"/getSales/" objectMapping:saleMapping delegate:self];
}
по сути, у меня есть вложенные массивы объектов, каков правильный способ сопоставления этих объектов??
и какой тип свойства должен иметь класс Sale для хранения списка брендов??
Любая помощь приветствуется, я уже потратил слишком много времени на исправление этого.
Ответ №1:
Попробуйте добавить:
[saleMapping mapKeyPath:@"brands" toRelationship:@"brands" withMapping:[BrandObject objectMapping]];
где [BrandObject objectMapping]
находится сопоставление для BrandObject (NSManagedObject со id
name
свойствами и).
По сути, вы можете использовать mapKeyPath:toRelationship:withMapping:
для вложенных сопоставлений. Вам также потребуется добавить свойство к вашему объекту продажи с типом NSSet
:
@property (nonatomic, retain) NSSet *brands;
Наконец, в реализации объекта Sale добавьте: @dynamic brands
наряду с другими операторами @dynamic .
Надеюсь, это поможет! Спасибо.
Комментарии:
1. Можете ли вы (или кто-либо другой) объяснить последний шаг «Добавить динамическое свойство к вашему объекту продажи с именем NSSet * brands» чуть более подробно? Вот где я зависаю.
2. Я обновил более подробную информацию о свойстве NSSet. Спасибо!