nsmutabledata가 유효하지 않은 이유를 찾는 방법
-
20-09-2019 - |
문제
편안한 URL에 액세스하고 결과를 얻습니다. 결과는 JSON에 있습니다. 응답을 다음을 통해 문자열로 바꿉니다.
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
NSString *json = [[NSString alloc] initWithBytes:[self.receivedData mutableBytes] length:[self.receivedData length] encoding:NSUTF8StringEncoding];
JSON 변수의 값은 0x0입니다. 내가 그것에 마우스를 할 때, 나는 본다 <Invalid CFStringRef
>. 왜 유효하지 않은지 알기 위해 어떻게 디버깅 할 수 있습니까? JSON 파서의 브라우저를 통해 JSON을 돌려줍니다. 그것은 잘 확인합니다.
URL에 ID를 입력하여 결과가 다시 제공됩니다. 다른 IDS는 문제없이 결과를 반환합니다. 결과 세트는 상당히 큽니다.
해결책
먼저 사용할 것입니다 initWithData:encoding:
NSString을 설정합니다. 작은 차이이지만 그 방법은 이유가 있습니다.
그런 다음, 나는 육각형을 할 것입니다 self.receivedData
실제로 거기에 무엇이 있는지 확인합니다. 해당 데이터가 올바르게 인코딩되지 않은 경우 initWithData:encoding:
실패합니다.
(NSData Hex 덤프 용 Google은 다른 사람들의 유틸리티 기능을 찾으려면이 작업을 수행합니다)
나는 때때로 웹 서비스가 인코딩에 부딪 치는 것을 발견했습니다. 그래서 나는 보통 다음과 같은 폴백을 구현합니다.
NSString* html = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
if (html == nil) {
html = [[NSString alloc] initWithData: data encoding: NSISOLatin1StringEncoding];
if (html == nil) {
html = [[NSString alloc] initWithData: data encoding: NSMacOSRomanStringEncoding];
}
}
이것이 필요하다는 것은 슬픈 일이지만 많은 웹 서비스가 제대로 작성되거나 구성되지 않았습니다.
다른 팁
사용 NSLog
바이트를 보려면.
제휴하지 않습니다 StackOverflow