2013-05-15 3 views
0

이것은 서비스에 게시해야하는 json입니다. 그런 다음RestKit 0.20 포스트 배열 Json 문제

{ 
     "deviceToken":"asdfasdfasdf", 
     "alarm": [ 
     { 
      "id":1, 
      "start" "8:30", 
      "end": "9:30", 
      "line": "156", 
      "code": "xxxafsdfasdf", 
      "station": "asdfa", 
      "stationLeft": 5, 
      "available": true, 
      "times": 2 
     }] 
    } 

내가 두 객체를 정의 : DeviceAlarm 개체 :

@interface DeviceAlarm : NSObject 

@property(nonatomic, strong) NSMutableArray *alarm; 

@property(nonatomic, copy) NSString *deviceToken; 

@end 

알람 대상 :

{ 
"deviceToken":"asdfasdfasdf", 
"alarm": [ 
{ 
    "start" "8:30", 
    "end": "9:30", 
    "line": "156", 
    "code": "xxxafsdfasdf", 
    "station": "asdfa", 
    "stationLeft": 5, 
    "available": true, 
    "times": 2 
}] 
} 

응답 데이터

는 알람에 또 하나 개의 필드 "ID"가
@interface Alarm : NSObject 

@property(nonatomic, copy) NSNumber *id; 

@property(nonatomic, copy) NSString *start; 

@property(nonatomic, copy) NSString *end; 

@property(nonatomic, copy) NSString *code; 

@property(nonatomic, copy) NSString *line; 

@property(nonatomic, copy) NSString *station; 

@property(nonatomic, copy) NSNumber *stationLeft; 

@property(nonatomic) BOOL available; 

@property(nonatomic, copy) NSNumber *times; 

@end 

이것은 내 코드입니다.

DeviceAlarm* devicealarm = [[DeviceAlarm alloc] init]; 

Alarm* alarm = [[Alarm alloc] init]; 
alarm.start = @"8:00"; 
alarm.end = @"9:30"; 
alarm.line = @"156"; 
alarm.code = @"fasdfasdf"; 
alarm.station = @"asdfas"; 
alarm.stationLeft = @1000; 
alarm.available = true; 
alarm.times = @1; 

devicealarm.alarm = [NSArray arrayWithObjects:alarm , nil]; 
devicealarm.deviceToken = @"adsfasdfasdf"; 

RKObjectMapping *alarmMapping = [RKObjectMapping requestMapping]; 

[alarmMapping addAttributeMappingsFromArray:@[@"start",@"end",@"code",@"station", @"stationLeft",@"available",@"times",@"line"]]; 

RKObjectMapping *deviceMapping = [RKObjectMapping requestMapping]; 

RKRelationshipMapping *alarmRelationship = [RKRelationshipMapping 
              relationshipMappingFromKeyPath:@"alarm" 
              toKeyPath:@"alarm" 
              withMapping:alarmMapping]; 


[deviceMapping addAttributeMappingsFromArray:@[@"deviceToken"]]; 

[deviceMapping addPropertyMapping:alarmRelationship]; 

NSString* path = @"/api/alarm/asdfasdf"; 
RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:deviceMapping 
                       objectClass:[DeviceAlarm class] 
                       rootKeyPath:nil]; 

RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:[DeviceAlarm DeviceAlarmResponseMapping] 
                        pathPattern:nil 
                         keyPath: nil 
                        statusCodes:[NSIndexSet indexSetWithIndex:200]]; 


RKObjectManager *manager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:@"http://127.0.0.1:5000/"]]; 
[manager addRequestDescriptor:requestDescriptor]; 
[manager addResponseDescriptor:responseDescriptor]; 

[manager postObject:devicealarm path:path parameters:nil 
            success:^(RKObjectRequestOperation *operation, RKMappingResult *result) { 
             NSLog(@"Loading mapping result: %@", result); 

            } failure:^(RKObjectRequestOperation *operation, NSError *error) { 
             RKLogError(@"Operation failed with error: %@", error); 
            }]; 

그런 다음 서비스의 게시물 데이터를 확인하고 restkit이 오류 배열 json을 게시했음을 발견했습니다. 알람 dict이 손실되었습니다.

{ 
     "deviceToken":"asdfasdfasdf", 
     "alarm": [ 
        "8:30", 
        "9:30", 
        "156", 
        "xxxafsdfasdf", 
        "asdfa", 
        5, 
        true, 
        2 
     ] 
    } 

는 ~ :)

답변

0

가 LOL, 내 문제를 해결했습니다 제발 도와주세요, 나는 DeviceAlarm 개체에에 "NSSet" "있는 NSMutableArray"에서 필드 유형을 변경 한 다음 작동합니다. 나는 이유를 모른다. 희망이 우리를 도울 수 있습니다.

+0

이유는 매우 간단합니다. 여기서 읽기 https://github.com/RestKit/RestKit/wiki/Object-mapping – giuseppe

+0

정확히 어떤 부분? – jAckOdE