为 CarPlay 音频应用添加 UI
Adding UI for CarPlay audio app
我正在我的 CarPlay 音频应用程序中添加一个列表(表格视图)。在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;
}
但是,应用程序在切换 (indexPath.row) 时崩溃并提示 'Invalid index path for use with UITableView. Index paths passed to table view must contain exactly two indices specifying the section and row. Please use the category on NSIndexPath in UITableView.h if possible.' 我是不是做错了什么?提前致谢。
MPPlayableContentDataSource 使用 NSIndexPath 的方式与 UITableView 不同。
要使 indexPath.row
工作,indexPath 必须恰好包含 2 个元素,但 numberOfChildItemsAtIndexPath: 可以使用包含 0 到 5 个元素的 indexPath 调用 - 这就是您的代码崩溃的原因
numberOfChildItemsAtIndexPath:一般应描述您的导航树 - 为导航中的特定节点提供 indexPath 它应该 return 您可以从该节点导航到的节点数
修复代码的一些方法是:
- (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 视频 "Enabling Your App for CarPlay",尤其是来自 6:00 的视频,他们展示了很好的示例。
我正在我的 CarPlay 音频应用程序中添加一个列表(表格视图)。在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;
}
但是,应用程序在切换 (indexPath.row) 时崩溃并提示 'Invalid index path for use with UITableView. Index paths passed to table view must contain exactly two indices specifying the section and row. Please use the category on NSIndexPath in UITableView.h if possible.' 我是不是做错了什么?提前致谢。
MPPlayableContentDataSource 使用 NSIndexPath 的方式与 UITableView 不同。
要使 indexPath.row
工作,indexPath 必须恰好包含 2 个元素,但 numberOfChildItemsAtIndexPath: 可以使用包含 0 到 5 个元素的 indexPath 调用 - 这就是您的代码崩溃的原因
numberOfChildItemsAtIndexPath:一般应描述您的导航树 - 为导航中的特定节点提供 indexPath 它应该 return 您可以从该节点导航到的节点数
修复代码的一些方法是:
- (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 视频 "Enabling Your App for CarPlay",尤其是来自 6:00 的视频,他们展示了很好的示例。