Почему IBOutletCollection указывает на статические ячейки из раскадровки, возвращая ноль? - PullRequest
9 голосов
/ 25 февраля 2012

Я определил это в коде:

@property (nonatomic, weak) IBOutletCollection(UITableViewCell) NSSet * certaintyCells;

и синтезировано. Я абсолютно уверен, что этот контроллер используется в истории, и подключил три ячейки к этой коллекции.

Далее, в вызове метода didSelectRowAtIndexPath: я добавил этот код с NSLog для отладки:

        NSLog(@"Certainty Cells: %@",certaintyCells);
        for (UITableViewCell * cell in certaintyCells) {
            [cell.textLabel setTextColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:1]];
            [cell setSelectionStyle:UITableViewCellSelectionStyleBlue];
        }

Вывод такой:

Certainty Cells: (null)

И, конечно, ожидаемое поведение не происходит.

Есть идеи относительно того, почему это происходит? Я убедился, что я использую статические ячейки, а не динамические прототипы. Как примечание стороны, эти три ячейки также связаны с (работающими) собственными IBOutlets.

Спасибо

Ответы [ 2 ]

36 голосов
/ 28 февраля 2012

Я нашел ответ, внеся изменения, которые не имели смысла для меня в то время. Я изменил свойство с weak на strong, и оно заработало.

Почему у меня было (слабое) во-первых:

Потому что я не хотел препятствовать освобождению чего-либо, если представление решило выгружаться из-за предупреждений памяти / т. Д.

Почему это мышление было неверным:

Поскольку IBOutletCollection является экземпляром NSSet или NSArray. что NSSet / NSArray не сохраняется представлением, потому что оно само не является подпредставлением. С IBOutlet слабое свойство в порядке, с IBOutletCollection требуется сильное свойство, иначе счетчик ссылок сразу становится равным нулю, и он освобождается.

Я оставляю это здесь в надежде, что это поможет кому-то еще.

3 голосов
/ 21 февраля 2013

Я бы сказал, что (нулевое) значение является следствием освобождения объекта, так как ARC предположил, что на этот объект никто не ссылается, и устанавливает значение равным нулю плюс освобождение его в некоторой точке.

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