我有以下错误,这是由下面的代码段引起的:
误差由于未捕获异常'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 feed填充。我正在使用XMLTouch进行解析。当我点击一个项目以进入详细视图时,它崩溃了。
我已经谷歌了这个问题,但我确实计算了- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {}
方法(返回[newsItems count];
)中的所有数组项。
我还记录了完整的newsItems数组,就在崩溃的上面。我可以告诉你,它不是空的。
如果不是行数,也不是空数组。这是什么?
一件奇怪的事:我总是得到这个错误:"索引0超出空数组的界限"。即使我点击第三或第四行,这会给我一个错误,如"index 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
如何初始化newsDetailView的nib文件?
由于没有创建或初始化nib文件,因此发生与视图相关的索引数组越界异常。
所以尝试创建nib文件并在那之后推送视图控制器
因为如果没有nib文件,导航控制器就没有东西可以推送到堆栈。
希望能有所帮助。
EDIT;
添加@property (nonatomic, retain) NSMutableArray *newsItems;
到标题和
@synthesize newsItems;
到你的实现文件。
老回答:
[self.navigationController pushViewController:NewsDetailView animated:YES];