Приложение iPhone вылетает при попытке развернуть детальное представление, потому что «индекс 0 выходит за границы для пустого массива» - PullRequest
0 голосов
/ 13 декабря 2011

У меня следующая ошибка, которая вызвана фрагментом кода ниже:

ошибка

Завершение работы приложения из-за необработанного исключения «NSRangeException», причина: '- [NSMutableArray objectAtIndex:]: индекс 0 за пределами для пустого массива'

код

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    newsDetailView *NieuwsDetailView = [[newsDetailView alloc] init];
    [NewsDetailView setAlleItems:newsItems];
    [NewsDetailView setCurrentItemId:indexPath.row];
    NSLog(@"%@", newsItems);
    [self.navigationController pushViewController:NewsDetailView animated:YES]; // This line gives the error
    [NewsDetailView release];
}

У меня есть UITableView с новостями, заполненными онлайн-фидом XML. Я разбираюсь с использованием XMLTouch. Когда я нажимаю на элемент, чтобы перейти к подробному виду, он вылетает.

Я погуглил проблему, но подсчитал все элементы массива в методе - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {} (возвращаем [newsItems count];).

Также я записываю полный массив newsItems, прямо над сбоем. И я могу вам сказать, это не пусто.

Так что, если это не количество строк и не пустой массив ... что это?

Одна странная (?) Вещь: Я всегда получаю эту ошибку: «index 0 за пределами для пустого массива». Даже если бы я щелкнул третью или четвертую строку, это дало бы мне ошибку типа «индекс 3 за пределами для пустого массива» или что-то в этом роде, верно?

** Дополнительная информация в подробном представлении .m **

- (void)viewDidLoad {
[super viewDidLoad];

[self setTitle:@"News"];
}

- (void)loadView {
[super loadView];

NSString *titel;
NSString *bericht;
NSString *datum;
NSString *foto;

titel = [[newsItems objectAtIndex: currentItemId] objectForKey: @"titel"];
bericht = [[newsItems objectAtIndex: currentItemId] objectForKey: @"bericht"];
datum = [[newsItems objectAtIndex: currentItemId] objectForKey: @"datum"];
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] && [[UIScreen mainScreen] scale] == 2) {
    foto = [[newsItems objectAtIndex: currentItemId] objectForKey: @"fotoRetina"];
} else {
    foto = [[newsItems objectAtIndex: currentItemId] objectForKey: @"foto"];
}

// Code I've ommited to keep things clear.
// I created a scrollView and put stuff in it, here. If anybody is interested in seeing this I can update this.

}

// No viewWillAppear, setAlleItems or setCurrentItemId methods

Ответы [ 2 ]

0 голосов
/ 13 декабря 2011

Как вы инициализируете файл пера для newsDetailView?

Так как файл пера не создан или не инициирован, исключение массива индекса происходит за пределами представления.

Итак, попробуйте создать файл пера и после этого нажать на контроллер представления.

Поскольку без nib-файла навигационному контроллеру нечего добавить в стек.

Надеется, что это поможет.

0 голосов
/ 13 декабря 2011

EDIT;

Добавить

@property (nonatomic, retain) NSMutableArray *newsItems; 

в заголовок и

@synthesize newsItems; 

в ваш файл реализации.

старый ответ:

[self.navigationController pushViewController:NewsDetailView animated:YES];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...