UIButton внутри UIView внутри UIScrollview, выпуск ARC - PullRequest
3 голосов
/ 10 ноября 2011

Это специфический вопрос для iOS5 и ARC.

Я настраивал набор UIViews внутри UIScrollView, каждый со своим собственным UIButton, объявленным внутри класса UIView:

      IBOutlet UIButton*button;
      @property(nonatomic,strong) UIButton*button;

(У меня также было оригинальное удержание вместо сильного, но это не имело никакого значения)

Я также синтезирую кнопку и подключаю ее в IB к:

      -(IBAction)showArticle:(id)sender;

Я добавляю ихвсе в виде прокрутки с большим циклом, в зависимости от типа статьи:

       NewsScrollLead*view = [[NewsScrollLead alloc]initWithNibName:@"NewsScrollLead"  bundle:nil];

       [view.view setFrame:CGRectMake(0, 0, 513, 225)];
       [view.titleLabel setText:[newsDict objectForKey:@"title"]];
       [view.details setText:[self flattenHTML:[newsDict objectForKey:@"description"]]];
       [view.source setText:[newsDict objectForKey:@"author"]];

       [view.details setFont:[UIFont fontWithName:@"HelveticaNeue-Condensed" size:14]];
       [view.titleLabel setFont:[UIFont fontWithName:@"HelveticaNeue-BoldCond" size:20]];
       [view.source setFont:[UIFont fontWithName:@"HelveticaNeue-Condensed" size:14]];

       [self.newsScrollView addSubview:view.view];

Это один пример того, как представление создается и добавляется в представление прокрутки.

КогдаЯ пытаюсь нажать на кнопку, я получаю нераспознанную ошибку селектора каждый раз из чего-то другого, а не из UIButton.Используя NSZombie, по какой-то причине кнопка была освобождена.

Есть идеи?Проблемы до iOS5 того же типа были решены путем сохранения UIButton или представления, в котором он содержался, но с ARC нет доступного сохранения.

1 Ответ

1 голос
/ 28 февраля 2013

У вас есть следующее: - объект NewsScrollLead с именем view (назовем его N) - внутри N есть, помимо прочего, вид (назовем его V) - внутри N также есть UIButton B - затем вы добавляете в self.newsScrollView вид V

Что случилось с N? Ну, он был освобожден, потому что он никогда не использовался. Следовательно, B также был освобожден. Единственный оставшийся предмет - V.

Ваша проблема в том, что вы создали V, который бесполезен. Оставайтесь с N и добавьте его в self.newsScrollView. Зачем нужен V внутри N? В качестве альтернативы, если вам нужен N для хранения всех видов элементов, тогда N должен быть NSObject (не NSView), а self должен иметь свойство array для хранения всех созданных вами N объектов.

...