2014-07-15 2 views
0

먼저 나는 영어가 모국어가 아닌 아마 내 문법이 정확하지 않은 말을,하지만 난 내 restkit에 무슨 일이 있었는지 설명하기 위해 최선을 다할 것입니다.Restkit 매핑에 NULL 데이터

나는 최근에 restkit을 학습하고 있습니다. 정말 큰 주제이며 터프합니다.

나는이 api을 사용하고 있습니다.

내가 모두 'current_condition'와 '날씨'여기

의 값 weatherDesc을 가져 오기 위해 시도해야 할

가 매핑 current_condition에 내 코드입니다 :

-(void)loadCurrentCondition{ 

    NSDictionary *queryParams = @{@"format": @"json"}; 
    [[RKObjectManager sharedManager] getObjectsAtPath:@"/demos/weather_sample/weather.php" parameters:queryParams success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) { 

_myArr = mappingResult.array; 
[self Humidity]; 
} 
failure:^(RKObjectRequestOperation *operation, NSError *error) { 
NSLog(@"The error is :%@",error); 
}]; 
} 

-(void)Humidity{ 
    restkitCurrentCondition *rkCC = [_myArr objectAtIndex:0]; 
    NSLog(@"///////////////////////the humidity is: %ld",rkCC.humidity.longValue); 
    NSLog(@"//////////////////// the cloudcover is: %ld",rkCC.cloudcover.longValue); 
    NSLog(@"/////////////// the weatherDesc is %@",rkCC.weatherDesc[0][@"value"]); 
    NSLog(@"///////// the weatherDesc in weather is %@",rkCC.restkitweather.myweatherDesc[0][@"value"]); 
    NSLog(@"///////// the weatherDesc in weather is %@",rkCC.restkitweather.myweatherDesc); 

} 

-(void)configureRestKit{ 


NSURL *baseURL = [NSURL URLWithString:@"http://www.raywenderlich.com"]; 
AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:baseURL]; 

RKObjectManager *objectManager = [[RKObjectManager alloc] initWithHTTPClient:client]; 

RKObjectMapping *currentMapping = [RKObjectMapping mappingForClass:[restkitCurrentCondition class]]; 
[currentMapping addAttributeMappingsFromArray:@[@"cloudcover",@"humidity",@"weatherDesc"]]; 
[currentMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"current_condition" toKeyPath:@"current_condition" withMapping:currentMapping]]; 


RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:currentMapping method:RKRequestMethodGET pathPattern:@"/demos/weather_sample/weather.php" keyPath:@"data.current_condition" statusCodes:[NSIndexSet indexSetWithIndex:200]]; 
[objectManager addResponseDescriptor:responseDescriptor]; 




//weahter weatherDesc 
RKObjectMapping *weatherMapping = [RKObjectMapping mappingForClass:[restKitWeather class]]; 
[weatherMapping addAttributeMappingsFromDictionary:@{@"weatherDesc": @"myweatherDesc"}]; 
[currentMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"weather" toKeyPath:@"weather" withMapping:weatherMapping]]; 
} 

그것은 나쁜로하지 간다, 그것을 상기 :

2014년 7월 15일 12 : 14 : 26.702 myRestSample [10,961 : 60B] /////////////////////// 습도가 59 2014-07-15 12 : 14 : 26.702 myRestSample [10961 : 60b] /////////////////////////////////// cloudcover는 16 2014년 7월 15일 12 : 14 : 26.703 myRestSample [10,961 : 60B] /////////////// weatherDesc가 2014년 7월 15일 12시 14분 분명하다 26.703 myRestSample [10961 : 60b] ///////// 날씨의 weatherDesc가 (null) 2014-07-15 12 : 14 : 26.703 myRestSample [10961 : 60b] ///////// 날씨에 weatherDesc는

왜 내가 널 데이터를 얻을 않았다

(NULL)입니다 ?????????

이 나는 ​​날씨가 current_condition가 포함되어 있지 않으며 나는 그것을 해결하는 방법을 모르기 때문에 내 키 패스가 잘못 느낌이
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    [self configureRestKit]; 
    [self loadCurrentCondition]; 

} 

있는 viewDidLoad

에 이러한 방법을 넣어.

아무도 도와 줄 수 있습니까?

답변

0

당신은 잘하고 있고 영어도 아주 좋습니다!

현재 두 개의 서로 다른 개체 관리자를 만들고있어 그 사이에 혼란스러워하고 있습니다. 모든 코드를 표시하지는 않지만 2 개의 요청을 작성해야하며 두 경우 모두 [[RKObjectManager sharedManager] getObjectsAtPath:...을 사용하고있는 것 같습니다. sharedManager는 항상 당신이 만든 첫 번째 관리자 인스턴스를 반환 것

참고. 따라서 두 번째 관리자를 만들고 구성하지만 결코 사용하지 마십시오.

이제 관리자가 2 명 필요하지 않습니다. 그들은 둘 다 동일한 기본 URL을 사용하므로 하나의 관리자 만 사용하고 모든 매핑을 추가해야합니다. 이제는 1 개의 요청 만하면되고 원하는 모든 데이터가 추출됩니다.

매핑 결과를 사용하는 방식을 변경해야합니다. array을 사용하는 대신 dictionary을 사용하십시오. 사전의 키는 응답 설명자의 주요 경로이므로 사전에서 원하는 것을 정확하게 얻을 수 있습니다.

+0

나는 이미 내 질문을 편집했습니다. 다시 확인하십시오 .2 건의 요청을했습니다. – TianMing

+0

을 수정하는 방법을 알려 드리겠습니다. 가능한 경우 코드로 알려주십시오. :) – TianMing

+0

더 많은 이슈가 있으면 우리는 약간의 시정을 할 것입니다. 당신은 잘 배우고 있으며 노력함으로써 더 잘 배울 것입니다. – Wain