我在CarPlay音频应用中添加了一个列表(tableview)。在AppDelegate.m中,我有
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
..........
[MPPlayableContentManager sharedContentManager].dataSource = self;
[MPPlayableContentManager sharedContentManager].delegate = self;
return YES;
}
我还在AppDelegate.m中实现了MPPlayableContentDataSource方法:
- (NSInteger)numberOfChildItemsAtIndexPath:(NSIndexPath *)indexPath
{
switch (indexPath.row)
{
case 0:
return 3;
case 1:
return 2;
default:
return 4;
}
}
- (MPContentItem *)contentItemAtIndexPath:(NSIndexPath *)indexPath
{
MPContentItem *contentItem = [[MPContentItem alloc] initWithIdentifier:@"container"];
.................
return contentItem;
}
但是,应用程序在switch(indexPath.row)崩溃并说“无效的索引路径”与UITableView一起使用。传递给表视图的索引路径必须包含指定节和行的两个索引。如果可能,请在UITableView.h中使用NSIndexPath上的类别。'我这里做错了吗?提前谢谢。
答案 0 :(得分:4)
MPPlayableContentDataSource使用的NSIndexPath与UITableView不同。
要使indexPath.row
工作,indexPath必须包含2个元素,但numberOfChildItemsAtIndexPath:可以使用包含0到5个元素的indexPath调用 - 这就是代码崩溃的原因
numberOfChildItemsAtIndexPath:通常应描述您的导航树 - 为导航中的特定节点提供indexPath,它应该返回您可以从此节点导航到的节点数
修复代码的一些方法是:
- (NSInteger)numberOfChildItemsAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.length == 0) {
// In a root of our navigation we have 3 elements
return 3;
}
if (indexPath.length == 1) {
switch ([indexPath indexAtPosition:0]) {
case 0:
// After tapping first item on our root list we see list with 3 elements
return 3;
case 1:
// for second one we get list with 2 elements
return 2;
default:
return 4;
}
}
return 0;
}
我建议观看WWDC视频"为CarPlay启用你的应用程序",特别是来自6:00,他们展示了很好的例子。