【问题标题】:Restkit complex Object Mapping, with nested object arrays, in Core Data核心数据中带有嵌套对象数组的 Restkit 复杂对象映射
【发布时间】:2011-12-07 17:48:47
【问题描述】:

我正在使用 coredata 和 restkit 来映射数据。

这是 getsales 调用的 json 响应

{   "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 类应该用什么类型的属性来存储品牌列表??

感谢任何帮助,我已经浪费了太多时间来解决这个问题。

【问题讨论】:

    标签: iphone objective-c core-data restkit


    【解决方案1】:

    尝试添加:

    [saleMapping mapKeyPath:@"brands" toRelationship:@"brands" withMapping:[BrandObject objectMapping]];

    其中[BrandObject objectMapping] 是 BrandObject(具有idname 属性的NSManagedObject)的映射。

    基本上你可以使用mapKeyPath:toRelationship:withMapping: 来嵌套映射。您还需要为您的 Sale 对象添加一个类型为 NSSet 的属性:

    @property (nonatomic, retain) NSSet *brands;

    最后,在 Sale 对象的实现中,在其他 @dynamic 语句旁边添加:@dynamic brands

    希望这会有所帮助!谢谢。

    【讨论】:

    • 您(或任何人)能否更详细地解释最后一步“向名为 NSSet *brands 的销售对象添加动态属性”?这就是我挂断电话的地方。
    • 我已经更新了有关 NSSet 属性的更多详细信息。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2015-11-23
    • 2012-04-02
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多