2009-04-13 2 views
1

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

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:@""]; 
+0

В коде, который вы отправили, нет переменной o1votes. Отправьте код, где назначена переменная и как она используется. – Chuck

+0

Извините, я хотел сказать o1string. Оригинальный пост обновлен. – FishFingers

+0

Все они NSStrings. Я проверил их обоих. Я установил заголовок UIAlertView как o1string, и он разбился, но когда я установил его в b1title (который также является NSString, заполненным данными точно так же), он запускается, как ожидалось. – FishFingers

ответ

6

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

Если вы не используете сборку мусора, вам необходимо сохранить объекты, которые вы хотите сохранить за текущим методом. Подробную информацию см. На странице Objective-C memory management guide.

+0

Он не установлен в том же методе, но он установлен в том же месте, что и b1title, который отлично работает. Оба изначально объявлены в файле заголовка. – FishFingers

+0

Если b1title установлен одинаково, и он работает, тогда вам просто повезет, потому что ваш код ошибочен. – Chuck

+0

+1 Я думаю, что переменная выпущена до созданного alertview. – Jab

0

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

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

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

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

Смежные вопросы