Нулевой указатель с использованием ARC? - PullRequest
0 голосов
/ 24 декабря 2011

Я начал новый проект и решил использовать ARC, но у меня довольно странная проблема.У меня есть подкласс UITableViewCell, который имеет 2 размера в зависимости от того, долго ли пользователь нажимает на ячейку или нет.Когда размер изменяется, он показывает другую часть ячейки с другим фоном, который частично перекрывает фактический фон ячейки.Для этого у меня есть свойство @property (strong, nonatomic, retain) UIImageView * optionsImageView;Я пробовал разные вещи, но все они приводят к одному и тому же результату, поэтому я просто объясню тот, который фактически закодирован.В методе init я создаю optionsImageView и добавляю его к себе в виде следующих значений:

UIImage* image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"sous_menu" ofType:@"png"]];
    self.optionsImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 
                                                                          self.frame.size.height - 12, 
                                                                          self.frame.size.width, 
                                                                          image.size.height)];
    optionsImageView.backgroundColor = [UIColor clearColor];
    optionsImageView.image = image;
    [self insertSubview:optionsImageView aboveSubview:self.backgroundView];  
    optionsImageView.alpha = 0;

Когда пользователь долго нажимает на ячейку, я меняю альфу optionsImageView.Но когда я проверяю его в методе layoutSubviews, optionImageView имеет значение nil, равно как и другие члены моего класса.

#pragma mark - ACTIONS
- (void)hideOptionsPanel
{
    NSLog(@"hideOptionsPanel for %@", titleLabel.text);
    self._cellOptions = LRCellOptionsHidden;
    NSLog(@"_cellOptions %d", self._cellOptions);
    self.optionsImageView.alpha = 0;
}

- (void)showOptionsPanel
{
    NSLog(@"showOptionsPanel for %@", titleLabel.text);
    self._cellOptions = LRCellOptionsShown;
    NSLog(@"_cellOptions %d (optionsImageView %@)", self._cellOptions, optionsImageView);
    self.optionsImageView.alpha = 1;
}

- (void)layoutSubviews
{
    NSLog(@"layoutSubviews for %@ (%d)", titleLabel.text, self._cellOptions);
    // rounded corners
    self.icon.layer.cornerRadius = 5.0;
    self.icon.clipsToBounds = YES;
}

и вот выходная информация для всего этого ....

2011-12-24 14:11:31.788 LendReminder[11189:fb03] layoutSubviews for Cars 2 Bluray (0)
2011-12-24 14:11:32.137 LendReminder[11189:fb03] showOptionsPanel for Cars 2 Bluray
2011-12-24 14:11:32.138 LendReminder[11189:fb03] _cellOptions 1 (optionsImageView (null))
2011-12-24 14:11:32.140 LendReminder[11189:fb03] layoutSubviews for Cars 2 Bluray (0)
2011-12-24 14:11:32.141 LendReminder[11189:fb03] layoutSubviews for Cars 2 Bluray (0)
2011-12-24 14:11:33.442 LendReminder[11189:fb03] layoutSubviews for Sleepy Hollow (0)
2011-12-24 14:11:33.790 LendReminder[11189:fb03] hideOptionsPanel for Cars 2 Bluray
2011-12-24 14:11:33.791 LendReminder[11189:fb03] _cellOptions 0
2011-12-24 14:11:33.793 LendReminder[11189:fb03] showOptionsPanel for Sleepy Hollow
2011-12-24 14:11:33.793 LendReminder[11189:fb03] _cellOptions 1 (optionsImageView (null))
2011-12-24 14:11:33.796 LendReminder[11189:fb03] layoutSubviews for Sleepy Hollow (0)
2011-12-24 14:11:33.796 LendReminder[11189:fb03] layoutSubviews for Cars 2 Bluray (0)
2011-12-24 14:11:33.797 LendReminder[11189:fb03] layoutSubviews for Sleepy Hollow (0)

Вы можете видеть, что в showOptionsPanel и HideOptionPanel параметр Enum работает нормально, в то время как в layoutSubviews он по-прежнему равен 0, а optionView равен нулю ... Какого черта?Это как-то связано с ARC или как?Thx.

1 Ответ

1 голос
/ 25 декабря 2011

Я понял;)) Я не установил reuseIdentifier в xib, поэтому каждый раз, когда я вызывал cellAtIndexPath, ячейка перестраивалась, следовательно, указатели были нулевыми.Я сосу, я знаю: D: D: D

...