Цель C - приложение вылетает при создании массива строк, я сумасшедший? - PullRequest
3 голосов
/ 04 октября 2009

Если я попытаюсь использовать этот простой код:

- (void)applicationDidFinishLaunching:(UIApplication *)application {
    // Add the tab bar controller's current view as a subview of the window
    [window addSubview:tabBarController.view];

    NSString *stringMer = [NSString stringWithFormat:@"OK COOL"] ;
    NSString *stringMer2 = [NSString stringWithFormat:@"OK COOL"];

    NSArray *truc = [NSArray arrayWithObjects:stringMer,stringMer2];
}

Сбой моего приложения («невозможно прочитать неизвестную команду загрузки 0x22» или просто обычный сбой) ... Что такое applicationDidFinishLaunching из моего FooAppDelegate, и у меня больше нет кода, это нормально?

Ответы [ 3 ]

37 голосов
/ 04 октября 2009

Список аргументов, передаваемых методу arrayWithObjects:, должен быть nil -определенным:

NSArray *truc = [NSArray arrayWithObjects:stringMer,stringMer2, nil];
9 голосов
/ 04 октября 2009

Не используйте + stringWithFormat: если у вас нет строки формата, которая требует анализа.

2 голосов
/ 28 октября 2009

NSResponder прав - не становитесь неряшливыми, если по умолчанию используется stringWithFormat Perspx также указал на довольно очевидную (но легко забываемую) ошибку с отсутствующим нулем.

Я был бы немного более явным -

(в .ч)

NSArray *truc; (assuming it won't be a property)

(в .м)

//actually, I'd define, "OK COOL" as a string and init with that, but...
    NSString *stringMer = [[NSString alloc] initWithString:@"OK COOL"] ;
    NSString *stringMer2 = [[NSString alloc] initWithString:@"OK COOL"]; 


    truc = [[NSArray alloc] initWithObjects:stringMer,stringMer2, nil];

//appease the memory gods
    [stringMer release];
    [stringMer2 release];

(затем, в бездействии)

[truc release];

Было бы хорошо по-настоящему ознакомиться с инструментами - бегите за утечками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...