Загрузка средства выбора из массива вызывает EXC_BAD_ACCESS - PullRequest
0 голосов
/ 24 ноября 2011

НАЙДЕНО! (Через 6 часов).

Вместо того, чтобы удалить мой вопрос, я оставил его включенным, если кто-то столкнется с той же проблемой.

Проблема:

Если я создаю массив с фиксированным списком элементов

theArray = [[NSArray alloc] initWithObjects: @"One", @"Two", nil]; 

и использовать это в подпрограмме titleForRow сборщика (стандартная формулировка, единственное отличие - оператор возврата):

return [theArray objectAtIndex: row];

сборщик заполняется и работает нормально.

Но, если я заполню theArray, используя ...

theArray = [[NSArray arrayWithArray: [textString componentsSeparatedByString: @"||"]];

программа бомбит сообщением BAD ACCESS. Я использовал NSLog для проверки textString и цикл для проверки того, что theArray содержит те же данные, как если бы они были заполнены напрямую (включая «nil»), но не может заставить сборщик принять theArray для заголовков строк, если элементы массива не зашиты.

РЕШЕНИЕ, добавьте слово "retain": я сдал arrayWithArrays и пошел с:

theArray = [[textString componentsSeparatedByString: @"||"] retain];

Очевидно, массив, который вы получаете с componentsSeparatedByString, автоматически высвобождается и не остается достаточно долго, чтобы сборщик мог быть заполнен. Я новичок в игре и не очень хорошо разбираюсь в проблемах с памятью, поэтому мои объяснения могут быть не на 100%. Но программа сейчас работает.

1 Ответ

0 голосов
/ 24 ноября 2011

От обновления Роба Смайта до вопроса с ответом:

РЕШЕНИЕ, добавьте слово retain: я сдал arrayWithArrays и пошел с:

theArray = [textString componentsSeparatedByString @"||"]retain];

Очевидно, массив, который вы получаете с componentsSeparatedByString, автоматически выпущен, и не остается достаточно долго, чтобы сборщик заселяться. Я новичок в игре и не очень осведомлен о проблемы с памятью, поэтому мое объяснение может быть не на 100%. Но программа сейчас работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...