웹 서비스에 요청을 보내고 다음 프로세스를 위해 JSON을 가져와야하는 앱을 개발 중입니다. AFNetworking
요청에 사용 하고 있습니다. 다음은 내 PHP 코드입니다.
$data = array(
array(
'userID' => 'xxx'
)
);
echo json_encode($data);
위의 코드를 이미 확인했으며 인쇄 된 결과는 괜찮습니다.
[{"userID":"xxx"}]
그런 다음 AFNetworking
이 Json 데이터에 대한 요청을 아래와 같이 보냅니다.
NSDictionary *parameters = @{@"action": @"verifyUDID", @"UDID": udid};
AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] init];
[manager POST:@"http://roommateradar.com/RoommateRadarAPI.php"
parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"%@",responseObject);
NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
(가) NSLog
올바르게 표시되는 JSON
데이터를하지만, 구문 분석되고 다음 행 JSON
있는 NSDictionary에이 충돌의 원인이됩니다, 출력은 다음과 같다
2014-04-10 21:59:56.893 RoommateRadar[2941:60b] (
{
userID = xxx;
}
)
2014-04-10 21:59:56.893 RoommateRadar[2941:60b] -[__NSCFArray bytes]: unrecognized selector sent to instance 0x1493e660
2014-04-10 21:59:56.895 RoommateRadar[2941:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFArray bytes]: unrecognized selector sent to instance 0x1493e660'
따라서 NSLog (@ "% @", responseObject); 실제로 올바른 것을 보여주고 있습니다. BTW, 나는 또한 시도했다
[NSJSONSerialization isValidJSONObject:responseObject];
responseObject를 확인하기 위해 결과도 유효합니다.
약간의 도움?
AFNetworking은 이미을 (를) deserialiss responseObject
하므로 사용할 필요가 없습니다 NSJSONSerialization
.
충돌은 예상 NSArray
할 NSJSONSerialization
때 deserialised 를 전달하기 때문 NSData
입니다.
또한 다음과 같은 경우 :
NSDictionary *dictionary = [NSJSONSerialization ...
어쨌든 사전을 얻지 못할 것이고 배열을 얻을 것입니다. 다음이 있어야합니다.
NSArray *users = (NSArray *)responseObject;
NSDictionary *user = [users objectAtIndex:0];
(분명히 users
어레이 를 확인해야합니다 count
)
또한를 사용할 때 isValidJSONObject:
잘못된 방식으로 사용하고 있습니다. 객체 를 JSON에서 변환 할 수 있는지 여부가 아니라 객체 를 JSON 으로 변환 할 수 있는지 확인합니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다