views:

145

answers:

1

Hello. I'm trying to send some data to a PHP script online to submit online scores for my iOS application.

The script will require account credentials formatted with the proper escape characters for a HTTP request. It's the setHTTPBody method which cashes the application:

        [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];
        }

I've found that it crashes at the point that the setHTTPBody method is called. Does anyone know why?

Thank you for any answer.

Edit: Here's the crash log:

    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
    )
+2  A: 

-setHTTPBody accepts NSData, not an NSString. You'll need to convert your NSString to NSData before setting it.

Luckily, NSString has a dataUsingEncoding: method to make it super easy.

Tom Irving
Thank you. I've implemented this. Unfortunately, it's still crashing.
Matthew Mitchell
Your crash log indicates you're trying to send stringByAdding... to something that's not an NSString. I'd look into that.
Tom Irving
ogl_view->username is definitely an NSString and so if the text property on the text field... I'm going to have to look deeply into it.Since you brought another problem to my attention, I will accept your answer as a solution and I thank you.The problem here must start somewhere else...
Matthew Mitchell
A line in another method is causing the problem:ogl_view->username = text_field.text;I need to figure out what that line is doing now. It's in a delegate method for a text view. It's the textFieldShouldReturn method.
Matthew Mitchell
I found how to fix it,This:ogl_view->username = text_field.text;Should be this:[ogl_view->username release]; //Release whatever string is there alreadyogl_view->username = [text_field.text retain];
Matthew Mitchell