2011-12-24 2 views
0

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

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, параметрImageView равен нулю, так же как и другие члены моего класса.

#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; 
} 

и вот ouptput за все это ....

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, а опцияView равна нулю ... Какого черта? Это что-то, что связано с ARC или что? Thx.

+1

Вы уверены, что метод -init вызывается вообще? – diederikh

+0

Да, это так. Когда я долгое время нажимаю на камеру, я вижу, что появляется UIImage, и он сразу исчезает ... Действительно странно ... – Khal

ответ

1

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

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