2010-02-04 2 views
0

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

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

ответ

0

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