NSURLConnection在iOS 6上正常工作,但在早期版本上没有

时间:2012-10-25 14:00:55

标签: ios5 xcode4.2 ios6 nsurlconnection nsurlrequest

我最初使用XCode 4.5创建了一个项目,但后来我将相同的代码移到了XCode 4.2。

我的代码在所有模拟器上运行良好,包括最新的iOS6,但在设备上它只适用于iOS6而不适用于早期版本。

当我使用某些参数向服务器发送请求时,它会返回错误“参数缺失”。 (我认为在iOS 5和6上创建的请求的方式不同,但不确定)

这是代码:

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    NSURL *requestURL = [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]];


    [request setURL:requestURL];
    [request setHTTPMethod:@"post"];

    NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"];
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
    [request addValue:contentType forHTTPHeaderField: @"Content-Type"];

    NSMutableData *body = [NSMutableData data];


    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"type_id\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithFormat:@"%@",type_poboq] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];

    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"signin_data\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithFormat:@"%@",jsonVal] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];

    [request setHTTPBody:body];


    [NSURLConnection sendAsynchronousRequest:request 
                                       queue:[NSOperationQueue mainQueue]
                           completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
                               if(error.localizedDescription == NULL)
                               {
                                   NSString *returnString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

                                   [delegate ConnectionDidFinishLoading:returnString];
                               }
                               else
                               {
                                   NSString *returnString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

                                   [delegate ConnectiondidFailWithError:returnString];
                               }

                           }];

1 个答案:

答案 0 :(得分:1)

显然边界存在一些问题,我使用了以下行代替了它。

NSString *boundary = @"---------------------------14737809831466499882746641449";