ARC - вставка нескольких подпредставлений и обработка действий - PullRequest
1 голос
/ 23 декабря 2011

У меня есть некоторые проблемы с ARC.Я пытаюсь добавить несколько представлений в ScrollView, и после этого, если пользователь коснется одного представления, вызовет действие.

Но когда пользователь коснется представления, я получаю это сообщение: «сообщение отправлено на освобожденный экземпляр»

Как мне сохранить виды?

это мой код в ViewController:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    int i;
    for (i=0;i<10;i++) {
        ChannelViewController *channelView = [[ChannelViewController alloc] init];
        [channelView.view setFrame:CGRectMake(i*175, 0, 175, 175)];
        //channelsScrollView is a ScrollView
        [self.channelsScrollView addSubview:channelView.view];
    }
    [self.channelsScrollView setContentSize:CGSizeMake(i*175, 175)];
}

1 Ответ

2 голосов
/ 26 декабря 2011

Вам необходимо хранить ссылку на все экземпляры ChannelViewController в вашем ViewController.В вашем коде после каждой итерации цикла ARC освобождает ваш экземпляр ChannelViewController.Самый простой способ избежать этого - подготовить свойство массива во ViewController.

// In ViewController.h
@property (nonatomic, retain) NSMutableArray * channelViews;

// In ViewController.m
@synthesize channelViews;

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.channelViews = [[NSMutableArray alloc] initWithCapacity:10];

    // Do any additional setup after loading the view from its nib.
    int i;
    for (i=0;i<10;i++) {
        ChannelViewController *channelView = [[ChannelViewController alloc] init];
        [channelView.view setFrame:CGRectMake(i*175, 0, 175, 175)];
        //channelsScrollView is a ScrollView
        [self.channelsScrollView addSubview:channelView.view];
        [self.channelViews addObject:channelView];     // <-- Add channelView to the array
    }
    [self.channelsScrollView setContentSize:CGSizeMake(i*175, 175)];
}
...