2012-04-30 1 views
0

Я получаю странный сбой из-за NSLocalizedString. - [Сохранение CFString]: сообщение отправлено на освобожденный экземпляр 0x3c6ad0.Objective-C, NSLocalizedString Случайный сбой

Я уверен, что это связано с NSLocalizedString, когда я заменяю его статической строкой. все идет хорошо. Вот строка, где я получил ошибку.

[_backButton setTitle:NSLocalizedString(sBackButtonDefaultTitle, nil) forState:UIControlStateNormal]; 

sBackButtonDefaultTitle - «Назад».

Что делает случайным то, что он иногда падает, а иногда и нет.

EDIT:

sBackButtonDefaultTitle определен в заголовочном файле

#define sBackButtonDefaultTitle @"Back" 

Заголовок, конечно, импортировать в файл .m.

EDIT:

Подробнее ... этого назад название кнопка используется приложение шириной. Почти у каждого контроллера. Однако авария происходит только после нажатия определенного контроллера.

Этот контроллер содержит веб-представление. Если я нажму кнопку «Назад», появится контроллер. Без падений. Но если я нажимаю любой контроллер с той же кнопкой «Назад», приложение сбой, давая ошибку, которую я проиллюстрировал выше.

Это действительно загадочно. Надеюсь, кто-то может помочь мне исправить это.

ответ

0

Этот краш из-за sBackButtonDefaultTitle будет выпущен до этого момента вашего кода. Убедитесь, что вы сохранили его, когда вы овладели им, и что вы его освобождаете после, используя его в этой строке кода.

+0

Это строка, определенная в определении, не предназначенном для выделения. –

+0

@ShatouDev Пожалуйста, отредактируйте свой вопрос, чтобы показать, где и как определяется строка. –

1

Несомненно, потому что вы sBackButtonDefaultTitle был освобожден, когда вы позвоните NSLocalizedString.

Я думаю, это автоматически выпущенная строка.

Возможно, вы захотите проверить с помощью NSZombie.

Возможно, вам понадобится сохранить строку sBackButtonDefaultTitle, когда вы ее создадите, и отпустите ее после вызова NSLocalizedString.

+0

sBackButtonDefaultTitle определяется в файле определения. –

+0

Показать, что «файл определения». – Macmade

+0

#define sBackButtonDefaultTitle @ "Назад" –

0

Причиной использования NSLocalizedString является поддержка нескольких языков для вашего приложения. NSLocalizedString обычно хорошо сочетается с файлом строковых ресурсов, чтобы система могла динамически выбирать язык, который он должен использовать для заполнения вашего пользовательского интерфейса. Я никогда не пытался использовать NSLocalizedString так, как вы это делаете, но я могу сказать, что вы используете файл строковых ресурсов, безусловно, будет работать. Взгляните на Apple's Guidelines for Internationalization и string resource file

Надеюсь, что это поможет.

+0

Я уже использую файл строк. Но в какой-то момент кажется, что iOS не может найти локализованную строку sBackButtonDefaultTitle. –

+0

Вы имеете в виду, что iOS может найти другие строки из строкового файла, но не sBackButtonDefaultTitle? Я никогда раньше этого не видел. Если все строки не могут быть распознаны, ваш строковый файл не будет создан правильно. Таким образом, вам нужно будет следовать примеру Apple, который предоставляет и генерирует файл из инструмента командной строки. –

+0

Вот что заставляет меня сходить с ума! Я действительно не знаю, почему это происходит! –

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

  • Нет связанных вопросов^_^