it-source

JSON(iOS)을 사용한 코코아 오류 3840

criticalcode 2023. 3. 7. 21:34
반응형

JSON(iOS)을 사용한 코코아 오류 3840

서버에 데이터를 전송하여 JSON 형식으로 응답을 받으려고 합니다.문제는 서버가 "성공" 또는 "실패"를 반환해야 하는데 "(늘)"을 반환한다는 것입니다.

다음은 반환된 오류입니다.

오류 도메인=NSCooaErrorDomain Code=3840 "작업을 완료할 수 없습니다.(Cocoa 오류 3840). (JSON 텍스트가 배열 또는 개체로 시작되지 않았으며 fragment가 설정되지 않도록 하는 옵션이 없습니다.)UserInfo=XXXXXXX{NSDebugDescription=JSON 텍스트가 배열 또는 개체로 시작되지 않았으며 조각이 설정되지 않도록 허용하는 옵션이 없습니다.}

서버 스크립트에 오류가 있을 수 있습니까?

데이터를 전송하고 응답을 받는 기능은 다음과 같습니다.

- (void) putData:(NSString *)parameter valor:(NSString *)valor {

    NSString *rawString = [NSString stringWithFormat:@"%@=%@", parameter, valor];
    NSData *data = [rawString dataUsingEncoding:NSUTF8StringEncoding];
    NSURL *url = [NSURL URLWithString:@"http://www.xxx.xxx/xxx.php"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [request setHTTPMethod:@"PUT"];
    [request setHTTPBody:data];
    NSURLResponse *response;
    NSError *error;
    NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    NSMutableDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
    NSLog(@"responseData: %@ error: %@", json, error);
}

옵션을 통과하지 않는 한NSJSONReadingAllowFragments로.[NSJSONSerialization JSONObjectWithData:options:error:]서버로부터의 응답은 어레이 또는 사전인 최상위 컨테이너와 함께 유효한 JSON이어야 합니다.

예를 들어 다음과 같습니다.

    { "response" : "Success" }

추신. 만약 당신이 변이 가능한 사전을 원한다면, 당신은 또한 다음을 포함해야 합니다.NSJSONReadingMutableContainers옵션을 선택합니다.

서버의 응답에 유효한 JSON이 포함되어 있지 않을 수 있습니다.

기술적으로 JSON 개체는 "array" 또는 "object(dictionary)"로 시작해야 합니다.

즉, 서버가 반환하는 것은 모두 무효가 됩니다.

또한 NSJSONReadingAllowFragments 옵션을 사용하여 JSON을 강제로 사용할 수 있습니다.

를 사용하여,

AFJSONResponseSerializer *responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];

iOS 기기에서 VPN에 연결되어 있는 경우 이 문제가 발생할 수 있습니다.

언급URL : https://stackoverflow.com/questions/14171111/cocoa-error-3840-using-json-ios

반응형