NSString содержит число, почему он вылетает из моего приложения? - PullRequest
1 голос
/ 13 апреля 2009

У меня возникли проблемы с NSString в моем приложении. По сути, у меня есть NSString с именем o1string, которая содержит значение «602». Я хочу вывести это в UIAlertView вместе с другим текстом.

votedmessage = [ NSString stringWithFormat:@"The current standings are as follows:\n\n%@: %@ votes", b1title, o1string ];
UIAlertView *votedAlert = [[UIAlertView alloc] initWithTitle:@"Thank you for voting" message:votedmessage delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];

Я использовал NSLog и убедился, что значение внутри NSString определенно равно 602, а другая переменная (b1title), используемая в сообщении, выводит нормально самостоятельно. Я не могу понять, почему происходит сбой приложения, когда я добавляю переменную o1votes к сообщению, хотя это как-то связано с конфликтом, связанным с удержанием только числа внутри NSString?

Вот как установлена ​​o1string. Он определенно содержит «602», извлеченный из файла XML.

o1string = [[options objectAtIndex:3] objectForKey: @"votes"];
o1string = [o1string stringByReplacingOccurrencesOfString:@"\n" withString:@""];
o1string = [o1string stringByReplacingOccurrencesOfString:@"    " withString:@""];

Ответы [ 2 ]

6 голосов
/ 13 апреля 2009

Если присвоение o1string не выполняется в том же методе, в котором создается votedmessage (поскольку вы не говорите, я предполагаю, что нет), оно исчезнет к тому времени, когда вы попадете в код, где votedmessage нуждается в этом. 1001 *

Если вы не используете сборщик мусора, вам нужно сохранить объекты, которые вы хотите оставить после текущего метода. См. Руководство по управлению памятью Objective-C для получения полной информации.

0 голосов
/ 13 апреля 2009

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

Если они находятся в разных местах, вы должны позвонить [o1string retain] (и позже [o1string release]). Самый простой способ сделать это - сделать свойство olstring сохраняющим семантику.

stringByReplacingOccurferencesOfString возвращает временный экземпляр, который будет автоматически освобожден через некоторое время после существования функции.

Я думаю, причина, по которой b1Title работает, заключается в том, что он хранится в вашем словаре, поэтому является постоянным. o1string создается из функций stringByXXX и является временным.

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