Сбой NSLocalizedStringFromTable - PullRequest
       17

Сбой NSLocalizedStringFromTable

0 голосов
/ 04 февраля 2010

Я создаю UIActionSheet с текстами кнопок из файла TXTS.После того, как я установил NSZombieEnabled, NSDebuEnabled в YES и NSDeallocateZombies в NO, я получаю точку останова с сообщением:

*** - [CFString isEqual:]: сообщение отправлено в освобожденный экземпляр 0x11fae00

Это происходит после третьего или четвертого показа таблицы UIActionSheet, а не сразу.Код, в котором это происходит:

UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:NSLocalizedStringFromTable( @"text", @"class", @"text" )
                                                        delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil
                                                        otherButtonTitles:NSLocalizedStringFromTable( @"text1", @"class", @"text1" ),
                                                            NSLocalizedStringFromTable( @"text2", @"class", @"text2" ),
                                                            NSLocalizedStringFromTable( @"text3", @"class", @"text3" ), nil];
[actionSheet showFromTabBar:self.tabBarController.tabBar]; 
[actionSheet release];

Если я удаляю NSDealocateZombies, в симуляторе больше не происходит сбоев, но я получаю предупреждения в консоли:

[CFString _cfTypeID]: сообщение отправлено на освобожденный экземпляр

Сталкивались ли вы с такими проблемами?Неправильно ли повторно получать строки из ресурса?В качестве последнего решения я подумал один раз поместить их в переменные-члены, чтобы избежать повторного вызова NSLocalizedStringFromTable для того же текста.

1 Ответ

0 голосов
/ 05 февраля 2010

В конце концов обнаружил проблему где-то еще: строка NSString, полученная через NSLocalizedStringFromTable, была позже выпущена , хотя для нее не было выполнено сохранение . Самое интересное, что сбой происходил внутри системной платформы совершенно другого класса. Так что, похоже, причиной было чрезмерное освобождение.

...