2014-02-27 54 views
0

我需要一些幫助來配置RestKit 0.2x ...我將帶有Schedule對象和ScheduleEntries的JSON作爲返回值嵌套數組。 樣品JSON:RestKit 0.2'NSInternalInconsistencyException',原因:'無法爲keyPath scheduleEntries添加映射,已經存在...'

[{ 
"id": 3, 
"name": "Schedule 9", 
"sWeek": 9, 
"sYear": 2014, 
"companyId": 1, 
"createdOn": "2014-02-11T22:01:33.547", 
"modifiedOn": null, 
"companyCode": "0001", 
"isActive": true, 
"notes": "This is a test note", 
"scheduleEntries": [{ 
    "id": 15, 
    "companyId": 1, 
    "userId": "a7e46520-8db7-4452-821d-7938b23fcd07", 
    "scheduleId": 3, 
    "jobId": 5, 
    "isActive": true, 
    "createdOn": "2014-02-11T22:01:33.993", 
    "modifiedOn": null, 
    "sWeek": 11, 
    "sYear": 2014, 
    "startTime": "2014-03-10T08:48:00", 
    "endTime": "2014-03-10T08:48:00" 
}, { 
    "id": 16, 
    "companyId": 1, 
    "userId": "a7e46520-8db7-4452-821d-7938b23fcd07", 
    "scheduleId": 3, 
    "jobId": 3, 
    "isActive": true, 
    "createdOn": "2014-02-11T22:01:34.003", 
    "modifiedOn": null, 
    "sWeek": 11, 
    "sYear": 2014, 
    "startTime": "2014-03-11T00:57:00", 
    "endTime": "2014-03-11T00:57:00" 
}, {.... 

NSManagedObjects

@interface Schedule : NSManagedObject 

@property (nonatomic, retain) NSNumber * scheduleId; 
@property (nonatomic, retain) NSString * name; 
@property (nonatomic, retain) NSNumber * sWeek; 
@property (nonatomic, retain) NSNumber * sYear; 
@property (nonatomic, retain) NSNumber * companyId; 
@property (nonatomic, retain) NSString * companyCode; 
@property (nonatomic, retain) NSString * notes; 
@property (nonatomic, retain) NSNumber * isActive; 
@property (nonatomic, retain) NSDate * createdOn; 
@property (nonatomic, retain) NSDate * modifiedOn; 
@property (nonatomic, retain) NSSet * scheduleEntries; 

@end 

@implementation Schedule 

@dynamic scheduleId; 
@dynamic name; 
@dynamic sWeek; 
@dynamic sYear; 
@dynamic companyId; 
@dynamic companyCode; 
@dynamic notes; 
@dynamic isActive; 
@dynamic createdOn; 
@dynamic modifiedOn; 
@dynamic scheduleEntries; 

@end 

@interface ScheduleEntry : NSManagedObject 

@property (nonatomic, retain) NSNumber * scheduleEntryId; 
@property (nonatomic, retain) NSNumber * companyId; 
@property (nonatomic, retain) NSNumber * usrId; 
@property (nonatomic, retain) NSNumber * scheduleId; 
@property (nonatomic, retain) NSNumber * jobId; 
@property (nonatomic, retain) NSNumber * sWeek; 
@property (nonatomic, retain) NSNumber * sYear; 
@property (nonatomic, retain) NSDate * startTime; 
@property (nonatomic, retain) NSDate * endTime; 
@property (nonatomic, retain) NSNumber * isActive; 
@property (nonatomic, retain) NSDate * createdOn; 
@property (nonatomic, retain) NSDate * modifiedOn; 

@end 

@implementation ScheduleEntry 

@dynamic scheduleEntryId; 
@dynamic companyId; 
@dynamic usrId; 
@dynamic scheduleId; 
@dynamic jobId; 
@dynamic sWeek; 
@dynamic sYear; 
@dynamic startTime; 
@dynamic endTime; 
@dynamic isActive; 
@dynamic createdOn; 
@dynamic modifiedOn; 

@end 

代碼:

RKManagedObjectStore *managedObjectStore = [RKManagedObjectStore defaultStore]; 

    // Create mapping for entity 
    RKEntityMapping *scheduleEntryMapping = [RKEntityMapping mappingForEntityForName:@"ScheduleEntry" inManagedObjectStore:managedObjectStore]; 

    scheduleEntryMapping.identificationAttributes = @[@"scheduleEntryId"]; 

    [scheduleEntryMapping addAttributeMappingsFromDictionary:@{ 
                @"id" :   @"scheduleEntryId", 
                @"companyId":  @"companyId", 
                @"usrId" :  @"usrId", 
                @"scheduleId" : @"scheduleId", 
                @"jobId" :  @"jobId", 
                @"isActive":  @"isActive", 
                @"sWeek":   @"sWeek", 
                @"sYear":   @"sYear", 
                @"startTime":  @"startTime", 
                @"endTime":  @"endTime", 
                @"createdOn":  @"createdOn", 
                @"modifiedOn": @"modifiedOn" 
                }]; 

    RKEntityMapping *scheduleMapping = [RKEntityMapping mappingForEntityForName:@"Schedule" inManagedObjectStore:managedObjectStore]; 

    scheduleMapping.identificationAttributes = @[@"scheduleId"]; 

    [scheduleMapping addAttributeMappingsFromDictionary:@{ 
                @"id" : @"scheduleId", 
                @"name":   @"name", 
                @"sWeek":   @"sWeek", 
                @"sYear":   @"sYear", 
                @"companyId":  @"companyId", 
                @"companyCode": @"companyCode", 
                @"notes":   @"notes", 
                @"isActive":  @"isActive", 
                @"createdOn":  @"createdOn", 
                @"modifiedOn": @"modifiedOn", 
                @"scheduleEntries": @"scheduleEntries" 
    }]; 

    [scheduleMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"scheduleEntries" 
                        toKeyPath:@"scheduleEntries" 
                       withMapping:scheduleEntryMapping]]; 

此代碼是非常接近RestKit 0.2倍的例子,但我似乎無法得到它的工作。我可以得到一個單獨的對象,但是當涉及嵌套數據的對象時,我會卡住。已經有幾天的工作沒有結果。錯誤說我不止一次設置keyPath,但我沒有看到它。任何幫助,將不勝感激。

回答

3

您只需要從scheduleMapping上的映射字典中刪除@"scheduleEntries": @"scheduleEntries",因爲它是通過關係映射添加(並因此重複)的。

除此之外看起來正確。

+0

非常感謝!那是票! – gigantor2012