views:

58

answers:

1

Hey All, Please help..I am unable to figure out this wierd problem. My app has iAds and multitasking support. The app can be deployed onto the iphone and its running pretty fine but when I tried to deploy my app on iphone 3g(with iOS 3.1.2) it throws the following error on the console. I tried commenting out the code for iAds but not sure whats going on here..Please help guys..thanks

[Session started at 2010-08-31 13:01:05 -0500.]
GNU gdb 6.3.50-20050815 (Apple version gdb-1470) (Thu May 27 05:54:06 UTC 2010)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "--host=i386-apple-darwin --target=arm-apple-darwin".tty /dev/ttys003
Loading program into debugger…
warning: Unable to read symbols from "iAd" (not yet mapped into memory).
Program loaded.
target remote-mobile /tmp/.XcodeGDBRemote-32678-64
Switching to remote-macosx protocol
mem 0x1000 0x3fffffff cache
mem 0x40000000 0xffffffff none
mem 0x00000000 0x0fff none
run
Running…
[Switching to thread 11779]
[Switching to thread 11779]
sharedlibrary apply-load-rules all
continue
2010-08-31 13:02:14.666 SugarCRMReleaseOne[5256:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSURL initWithString:relativeToURL:]: nil string parameter'
2010-08-31 13:02:14.709 SugarCRMReleaseOne[5256:207] Stack: (
    853417245,
    845594132,
    852966195,
    852966099,
    871903965,
    871903579,
    871903537,
    211149,
    211529,
    147487,
    171893,
    290105,
    279933,
    853174415,
    818198404,
    818198252,
    818198196,
    818197260,
    818200460,
    818194688,
    818192276,
    818173840,
    818172052,
    834382224,
    853165355,
    853163039,
    834376564,
    817839152,
    817832496,
    8857,
    8720
)
terminate called after throwing an instance of 'NSException'
Program received signal:  “SIGABRT”.
kill
quit

EDIT

1 [syncDelegateImpl loginHandler];

2 -(void) loginHandler { SCRMsugarsoap* service = [[SCRMsugarsoap alloc] initWithUrl:serverURL]; service.logging = YES; service.username = userName; service.password = password; [service login:self action:@selector(sessionIdHandler:) user_auth: [[[SCRMuser_auth alloc] initWithUsername:userName andPassword:password]autorelease] application_name: @""]; [service release]; }

3 When it encounters [service login:self action:@selector(sessionIdHandler:) user_auth: [[[SCRMuser_auth alloc] initWithUsername:userName andPassword:password]autorelease] application_name: @""];

  • (id) initWithUsername: (NSString*) username andPassword: (NSString*) pass { if(self = [super init]) { Soap *converter = [[Soap alloc] init]; SCRMsugarsoap *service = [[SCRMsugarsoap alloc] init];

        [service get_server_version:self action:@selector(get_server_versionHandler:)];
    
    
    
    self.user_name = username;
    self.password = [converter tomd5:pass];
    
    
    [converter release];
    [service release];
    
    } return self;

    }

4 Now when it encounter [service get_server_version:self action:@selector(get_server_versionHandler:)]; in the above method..

  • (SoapRequest*) get_server_version: (id) _target action: (SEL) _action { NSMutableArray* _params = [NSMutableArray array];

    NSString* _envelope = [Soap createEnvelope: @"get_server_version" forNamespace: self.namespace withParameters: _params withHeaders: self.headers];
    SoapRequest* _request = [SoapRequest create: _target action: _action service: self soapAction: (@"%@/get_server_version", serverURL) postData: _envelope deserializeTo: @"NSString"];
    [_request send];
    return _request;
    

    }

    5 Now it tries to call SOAP Request class method

    • (SoapRequest*) create: (SoapHandler*) handler action: (SEL) action service: (SoapService*) service soapAction: (NSString*) soapAction postData: (NSString*) postData deserializeTo: (id) deserializeTo { SoapRequest* request = [SoapRequest create: handler action: action urlString: service.serviceUrl soapAction: soapAction postData:postData deserializeTo:deserializeTo]; request.defaultHandler = service.defaultHandler; request.logging = service.logging; request.username = service.username; request.password = service.password; return request; }

6 So when it tries to set the request the below method is called

+ (SoapRequest*) create: (SoapHandler*) handler action: (SEL) action urlString: (NSString*) urlString soapAction: (NSString*) soapAction postData: (NSString*) postData deserializeTo: (id) deserializeTo {
    SoapRequest* request = [[SoapRequest alloc] init];
    //request.url = nil;
    //if(urlString!=nil)
    //{
    request.url=[NSURL URLWithString: urlString];
    //}
    request.soapAction = soapAction;
    request.postData = [postData retain];
    request.handler = handler;
    request.deserializeTo = deserializeTo;
    request.action = action;
    request.defaultHandler = nil;
    return [request autorelease];
}

while setting the url it throws objc_exception_throw..It works fine on iphone 4 but when I am trying to deploy on iphone 3 it throws the errors..

I have multitasking and iAd frameworks in my app and I checked for the versions in the following way:

if ([[UIDevice currentDevice].systemVersion floatValue] >=3.2)
{
do iphone 4 stuff
}
else
{
do iphone 3 stuff
}
A: 

Your issue is right there in the report: you're passing nil to initWithString: which causes the exception. Either check for nil before calling the initializer or ensure the string value another way to fix the problem.

Edit: I'd recommend simplifying your class initializer, but that's not your problem. If urlString isn't properly formed, the URL will return nil. According to Apple's docs: The string with which to initialize the NSURL object. Must conform to RFC 2396. This method parses URLString according to RFCs 1738 and 1808.

That may be your problem, though I don't know if you posted enough code to be sure.

jshier
but how come it works for iphone 4..when I try to debug it sets the value to the string for the same code
racharambola
How are you setting the value of the string? Posting some code would probably help.
jshier
Its all done within the service I use..I am using sudz generated code..I will post some code
racharambola
Please check the edited code..the line request.url is returning nil but when I tried on iphone 4 it has a value..
racharambola
thanks for reply jshier..can you please let me know how to make url confirm to RFC 2396..I am running out of ideas..It works perfect with iOS 4 and above..the problem is when I test with iOS 3.1.2 its getting crashed..
racharambola
jshier..I posted the sequence of code where it references each method and gets crashed..I edited the above code..
racharambola
`[NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]` may fix that for you. Be sure you use the correct string encoding. Escaping the string should put it into the proper format.
jshier
Also, logging `urlString` before sending it to NSURL may help show the problem. Results of that on both iPhone 3.1.3 and 4 could be helpful.
jshier
I tried to do this..when I checked the log on the console it prints null when tried with iphone 3.1.2 OS and it prints the URL when I tried with iphone 4 OS
racharambola
Try to follow the history of the string and see where it's failing.
jshier