Приложение загружается на iphone4, но не на строковый параметр 3g..nil

Пожалуйста, помогите .. Я не могу решить эту странную проблему. В моем приложении есть iAds и поддержка многозадачности. Приложение можно развернуть на 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 - (недействительно) loginHandler {SCRMsugarsoap * service = [[SCRMsugarsoap alloc] initWithUrl: serverURL]; service.logging = ДА; service.username = имя пользователя; service.password = пароль; [логин службы: самостоятельное действие: @selector (sessionIdHandler :) user_auth: [[[SCRMuser_auth alloc] initWithUsername: userName andPassword: password] autorelease] application_name: @ ""]; [сервис-релиз]; }

3 Когда он встречает [логин службы: самодействие: @selector (sessionIdHandler :) user_auth: [[[SCRMuser_auth alloc] initWithUsername: userName andPassword: password] autorelease] application_name: @ ""];

  • (id) initWithUsername: (NSString *) имя пользователя и пароль: (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 действие: (SEL) _action {NSMutableArray * _params = [массив NSMutableArray];

    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; return request; }

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
}

person racharambola    schedule 31.08.2010    source источник


Ответы (1)


Ваша проблема прямо здесь, в отчете: вы передаете nil в initWithString:, что вызывает исключение. Либо проверьте значение nil перед вызовом инициализатора, либо убедитесь, что строковое значение является другим способом решения проблемы.

Изменить: я бы рекомендовал упростить инициализатор вашего класса, но это не ваша проблема. Если urlString сформирован неправильно, URL вернет ноль. Согласно документации Apple: строка, с помощью которой инициализируется объект NSURL. Должен соответствовать RFC 2396. Этот метод анализирует URLString в соответствии с RFC 1738 и 1808.

Это может быть вашей проблемой, хотя я не знаю, достаточно ли вы разместили кода, чтобы быть уверенным.

person Jon Shier    schedule 31.08.2010
comment
но почему это работает для iphone 4 .. когда я пытаюсь отладить, он устанавливает значение в строку для того же кода - person racharambola; 31.08.2010
comment
Как вы устанавливаете значение строки? Публикация кода, вероятно, поможет. - person Jon Shier; 31.08.2010
comment
Все это делается в рамках службы, которую я использую ... Я использую код, сгенерированный Sudz ... Я опубликую код - person racharambola; 31.08.2010
comment
Пожалуйста, проверьте отредактированный код .. строка request.url возвращает nil, но когда я попробовал на iphone 4, у нее есть значение .. - person racharambola; 01.09.2010
comment
спасибо за ответ jshier .. не могли бы вы сообщить мне, как сделать URL-адрес, подтверждающий RFC 2396 .. У меня заканчиваются идеи .. Он отлично работает с iOS 4 и выше .. проблема в том, когда я тестирую с iOS 3.1. 2 его разбивается .. - person racharambola; 01.09.2010
comment
jshier .. Я разместил последовательность кода, в которой он ссылается на каждый метод и вылетает .. Я отредактировал приведенный выше код .. - person racharambola; 01.09.2010
comment
[NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]] может исправить это для вас. Убедитесь, что вы используете правильную кодировку строки. Экранирование строки должно привести ее к правильному формату. - person Jon Shier; 01.09.2010
comment
Кроме того, регистрация urlString перед отправкой в ​​NSURL может помочь выявить проблему. Результаты этого на iPhone 3.1.3 и 4 могут быть полезны. - person Jon Shier; 01.09.2010
comment
Я попытался сделать это ... когда я проверил журнал на консоли, он печатает null при попытке с ОС iphone 3.1.2 и печатает URL-адрес, когда я пробовал с ОС iphone 4 - person racharambola; 01.09.2010
comment
Попробуйте проследить историю строки и посмотреть, где она выходит из строя. - person Jon Shier; 01.09.2010