为CarPlay音频应用添加UI

时间:2017-08-17 04:13:28

标签: ios user-interface audio carplay

我在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上的类别。'我这里做错了吗?提前谢谢。

1 个答案:

答案 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,他们展示了很好的例子。