Сбой NSLocalizedStringFromTable

Я создаю 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 для того же текста.


person Mihai    schedule 04.02.2010    source источник


Ответы (1)


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

person Mihai    schedule 05.02.2010