IOS: NSMutableArray в Viewdidload - PullRequest
       17

IOS: NSMutableArray в Viewdidload

0 голосов
/ 13 апреля 2011

В моем проекте я использую NSmutablearray, который я заполняю с помощью UIImageView в .m (viewDidLoad)

arrayView = [[NSMutableArray alloc] initWithObjects: image1, image2, image3, nil];

но в методе

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

когда я пишу

int i = 1;
[[arrayView objectAtIndex:i] setImage:image];

есть исключение, которое говорит, что мой массив пуст ... почему?

Ответы [ 2 ]

1 голос
/ 14 апреля 2011

Пожалуйста, оставьте остаток viewDidLoad. Я хочу посмотреть, как инициализируется image1. Линия:

arrayView = [[NSMutableArray alloc] initWithObjects: image1, image2, image3, nil];

вернет пустой массив, если image1 равно нулю. Вы также должны защищать свое приложение от сбоев, не делая предположений об источнике данных. Вы не должны падать, если массив пуст, просто отображайте пустой tableView.

[EDIT]

Я только что прочитал последний комментарий, который вы сделали в другом ответе. Похоже, ваши imageViews создаются в IB. Убедитесь, что они подключены к image1 и т. Д. В IB.

0 голосов
/ 13 апреля 2011

Попробуйте вместо этого:

if (i < [arrayView count]) {
    UIImageView *imageView = [arrayView objectAtIndex:i];
    imageView.image = image;
}

Разделение доступа к элементу массива (путем присвоения его фактическому объекту UIImageView), а затем назначение нового изображения может быть полезным.Я видел случаи, когда, если вы сложите слишком много операций, вещи запутаются, особенно если вы имеете дело с объектами разных типов, которые могут иметь или не иметь селекторы, которые вы используете.

Почему ваш массивоказаться пустым - это еще одна проблема.Инициализация в viewDidLoad кажется правильной.Вам может потребоваться добавить некоторую «защиту» (как указано выше) в методы таблицы, чтобы избежать доступа к пустому массиву.Затем в методе, подобном viewWillAppear:, вызовите reloadData.

...