НАЙДЕНО! (Через 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%. Но программа сейчас работает.