문제

내 질문은 다음과 중복됩니다.

나머지 키트:간단한 JSON 문자열 배열을 가져오는 방법은 무엇입니까?

그러나 원저자가 답변이 도움이 되었다고 생각했지만 여전히 혼란스럽습니다.이 질문에는 두 개의 별도 참조가 포함되어 있지만 어느 쪽도 나에게 도움이 될 만큼 충분하지 않았습니다(완전한 초보자). KVC 그리고 RestKit).

한 가지 참고자료는 여기 이 예제 코드를 제공합니다

RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[Whatever class]];
[mapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:nil toKeyPath:@"someAttribute"]];
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:mapping pathPattern:@"/whatever" keyPath:nil statusCodes:nil];

어떤 클래스가 되어야 할까요?NSString이어야 합니까?아니면 NSArray *라는 하나의 속성을 가진 래퍼 클래스를 만들어야 한다는 의미입니까?

그리고 @"someAttribute"는 무엇입니까?다시 말하지만, 이는 someAttribute가 NSArray인 래퍼 클래스의 속성 이름이 되는 래퍼 클래스를 의미합니까 *?

다른 참고자료는 여기 배열에서 "래퍼 클래스"로 가져오는 것을 보여주지만 래퍼 클래스에는 배열이 아닌 하나의 NSNumber만 있습니다.따라서 해당 예제를 전체 배열을 얻는 데 작동하는 예제로 바꾸는 방법은 명확하지 않습니다.

참고로 서버는 원래 질문과 마찬가지로 문자열 배열을 반환합니다.["문자열1", "문자열2", "문자열3"].

업데이트

내가 시도한 코드는 다음과 같습니다.래퍼 클래스를 만들었습니다.

@interface CannedResponse : NSObject

@property (strong, nonatomic) NSString * response;

@end

매핑은 다음과 같습니다.

RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[CannedResponse class]];
[mapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:nil toKeyPath:@"response"]];
[manager addResponseDescriptor:[RKResponseDescriptor responseDescriptorWithMapping:mapping method:RKRequestMethodGET pathPattern:RESPONSES_API_PATH keyPath:nil statusCodes:nil;

그리고 나는 전화하고 있어요 getObjectsAtPathForRouteName

내가 돌려받는 것은 다음과 같은 배열입니다. CannedReponses 예상대로.그러나 오히려 NSString 응답 속성에 추가됩니다.나는 점점 RKMappingSourceObject.이제 RKMappingSourceObject 실제로 올바른 문자열이 포함되어 있습니다.

내가 샅샅이 조사해 볼게 RestKit 콘솔에 로그인하여 더 많은 단서를 얻을 수 있는지 확인하세요.

업데이트#2

말한 바와 같이 여기 작성자: blakewatters 이 예에서는 매핑을 수행하지 않으며 다음의 사용을 우회할 수 있습니다. RestKit.문제는 내가 서비스 계층에서 작성하고 있는 모든 코드가 RestKit 그리고 나는 모든 통화의 패턴을 맹목적으로 따르고 있었습니다.이 통화의 올바른 대답은 액세스 방법을 알아내는 것일 수 있습니다. AFNetworking 곧장.

도움이 되었습니까?

해결책

blakewatters의 다른 의견을 사용한 더 나은 답변은 다음과 같습니다. 여기

이와 같은 요청에는 RestKit을 사용하지 마세요.AFNetworking을 사용하면 됩니다.그리고 다음과 같이 AFHTTPClient에 액세스할 수 있습니다.

[RKObjectManager sharedManager].HTTPClient

그러면 코드는 다음과 같습니다.

AFHTTPClient * client = [RKObjectManager sharedManager].HTTPClient;
[client getPath:YOUR_PATH
     parameters:nil
        success:^(AFHTTPRequestOperation *operation, id responseObject) {
            success([NSArray arrayWithArray:responseObject]);
        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
            failure(operation.response.statusCode);
        }];

다른 팁

UPDATE 섹션에서 수행한 방식이 작동하는 것으로 나타났습니다.

RKMappingSourceObject는 붉은 청어였습니다.이는 NSProxy를 구현하므로 내가 기대했던 NSString처럼 작동합니다.

뒤에서 무슨 일이 일어나고 있는지에 대한 내 추측은 다음과 같습니다.RestKit은 역직렬화되면서 RKMappingSourceObject 인스턴스를 생성합니다.내가 가지고 있는 이러한 개체가 기본 요소이고 어떤 것에도 매핑되지 않는다는 것을 인식하면 매핑 개체에 그대로 두지만 NSProxy를 구현하므로 모든 요청을 기본 문자열로 전달할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top