Я начал новый проект, и я решил использовать 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.
Вы уверены, что метод -init вызывается вообще? – diederikh
Да, это так. Когда я долгое время нажимаю на камеру, я вижу, что появляется UIImage, и он сразу исчезает ... Действительно странно ... – Khal