应用程序在iphone4上加载但不在3g..nil字符串参数上加载

时间:2010-08-31 18:34:29

标签: iphone objective-c deployment nsurl

请帮助..我无法弄清楚这个奇怪的问题。我的应用程序具有iAd和多任务支持。该应用程序可以部署到iPhone上运行相当不错,但当我尝试在iphone 3g上部署我的应用程序(使用iOS 3.1.2)时,它会在控制台上抛出以下错误。我试着评论iAds的代码,但不知道这里发生了什么......请帮助大家......谢谢

[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

修改

1 [syncDelegateImpl loginHandler];

2 - (void)loginHandler {     SCRMsugarsoap * service = [[SCRMsugarsoap alloc] initWithUrl:serverURL];     service.logging = YES;     service.username = userName;     service.password =密码;     [service login:self action:@selector(sessionIdHandler :) user_auth:[[[SCRMuser_auth alloc] initWithUsername:userName andPassword:password] autorelease] application_name:@“”];     [服务发布]; }

3遇到时 [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现在遇到[service get_server_version:self action:@selector(get_server_versionHandler :)];在上面的方法..

  • (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现在它尝试调用SOAP Request类方法

    • (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;     退货要求; }

6因此,当它尝试设置请求时,将调用以下方法

+ (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];
}

设置url时会抛出objc_exception_throw ..它在iphone 4上工作正常但是当我尝试在iphone 3上部署时会抛出错误..

我的应用程序中有多任务处理和iAd框架,我通过以下方式检查版本:

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

1 个答案:

答案 0 :(得分:0)

您的问题就在报告中:您将nil传递给initWithString:,导致异常。在调用初始化程序之前检查nil或确保字符串值是另一种解决问题的方法。

编辑:我建议简化您的班级初始化程序,但这不是您的问题。如果urlString未正确形成,则网址将返回nil。根据Apple的文档:用于初始化NSURL对象的字符串。必须符合RFC 2396.此方法根据RFC 1738和1808解析URLString。

这可能是你的问题,但我不知道你是否发布了足够的代码来确定。