NSMutableURLRequest setHTTPBody:崩溃

时间:2010-09-02 14:57:49

标签: iphone objective-c ios

我正在尝试将一些数据发送到在线PHP脚本,以便为我的iOS应用程序提交在线分数。

该脚本将要求使用HTTP请求的正确转义字符格式化的帐户凭据。它是使用应用程序的setHTTPBody方法:

        [text_field removeFromSuperview];
        text_field.text = @""; //Remove text so it doesn't show because the text field is still on top of the open gl view
        text_field.enabled = NO;
        NSMutableURLRequest * request=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"secret"] cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:10.0];
        [request setHTTPMethod: @"POST"];
        [request setHTTPBody: [[NSString stringWithFormat:@"username=%@&password=%@&score=%i",[ogl_view->username stringByAddingPercentEscapesUsingEncoding:NSUnicodeStringEncoding],[text_field.text stringByAddingPercentEscapesUsingEncoding:NSUnicodeStringEncoding],ogl_view->score[0]] dataUsingEncoding:NSUnicodeStringEncoding]];  
        NSURLConnection * connection = [[NSURLConnection alloc] initWithRequest: request delegate:self];
        if (connection){
            received_data = [[NSMutableData data] retain];
            ogl_view->section = CURLING_PROCESS_CREDENTIALS;
        }else{
            ogl_view->section = CURLING_LOGIN_OR_REGISTER;
            UIAlertView *connection_alert = [[UIAlertView alloc] initWithTitle:@"Error" message: @"Can't connect to server" delegate:nil cancelButtonTitle:@"Close" otherButtonTitles: nil];
            [connection_alert show];
            [connection_alert release];
        }

我发现它在调用setHTTPBody方法时崩溃了。有谁知道为什么?

感谢您的回答。

编辑:这是崩溃日志:

    2010-09-02 19:02:30.291 iPhone Monkey Curling[431:207] -[DOMText stringByAddingPercentEscapesUsingEncoding:]: unrecognized selector sent to instance 0x5c97ce0
    2010-09-02 19:02:30.293 iPhone Monkey Curling[431:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[DOMText stringByAddingPercentEscapesUsingEncoding:]: unrecognized selector sent to instance 0x5c97ce0'
    *** Call stack at first throw:
    (
        0   CoreFoundation                      0x02531919 __exceptionPreprocess + 185
        1   libobjc.A.dylib                     0x0267f5de objc_exception_throw + 47
        2   CoreFoundation                      0x0253342b -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
        3   CoreFoundation                      0x024a3116 ___forwarding___ + 966
        4   CoreFoundation                      0x024a2cd2 _CF_forwarding_prep_0 + 50
        5   iPhone Monkey Curling               0x00004338 -[PasswordFieldDelegate textFieldShouldReturn:] + 450
        6   UIKit                               0x00699358 -[UIKeyboardImpl callShouldInsertText:] + 148
        7   UIKit                               0x05f29c86 -[UIKeyboardImplAccessibility(SafeCategory) callShouldInsertText:] + 70
        8   UIKit                               0x006a0693 -[UIKeyboardImpl addInputString:fromVariantKey:] + 107
        9   UIKit                               0x006a2957 -[UIKeyboardImpl handleKeyEvent:] + 1723
        10  UIKit                               0x007c31c0 -[UIKeyboardLayoutStar sendStringAction:forKey:] + 684
        11  UIKit                               0x007c79ba -[UIKeyboardLayoutStar touchUp:] + 2556
        12  UIKit                               0x006b99a3 -[UIKeyboardLayout touchesEnded:withEvent:] + 550
        13  UIKit                               0x0058a2ff -[UIWindow _sendTouchesForEvent:] + 567
        14  UIKit                               0x0056c1ec -[UIApplication sendEvent:] + 447
        15  UIKit                               0x00570ac4 _UIApplicationHandleEvent + 7495
        16  GraphicsServices                    0x02d97afa PurpleEventCallback + 1578
        17  CoreFoundation                      0x02512dc4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
        18  CoreFoundation                      0x02473737 __CFRunLoopDoSource1 + 215
        19  CoreFoundation                      0x024709c3 __CFRunLoopRun + 979
        20  CoreFoundation                      0x02470280 CFRunLoopRunSpecific + 208
        21  CoreFoundation                      0x024701a1 CFRunLoopRunInMode + 97
        22  GraphicsServices                    0x02d962c8 GSEventRunModal + 217
        23  GraphicsServices                    0x02d9638d GSEventRun + 115
        24  UIKit                               0x00574b58 UIApplicationMain + 1160
        25  iPhone Monkey Curling               0x00002388 main + 102
        26  iPhone Monkey Curling               0x00002319 start + 53
    )

1 个答案:

答案 0 :(得分:3)

-setHTTPBody接受NSData,而不是NSString。在设置之前,您需要将NSString转换为NSData

幸运的是,NSString有一种dataUsingEncoding:方法,可以让它变得非常轻松。