MPPlayableContentDataSource调用不一致

时间:2017-08-31 13:16:29

标签: ios ios-simulator carplay

我正在努力实现对CarPlay音频应用的支持,并且我正在尝试在模拟器中显示列表。我已经实现了MPPlayableContentDataSource,但发现它被称为不一致。这是第一次在模拟器上启动应用程序,如果CarPlay在启动时打开,我可以通过向上滚动其他空列表来触发重绘来显示第一个项目。  但是,CarPlay似乎无法调用数据源,在随后的启动中,我看到一个空屏幕或一个微调器,后面跟着消息Unable to connect to "AppName"。我尝试了不同的东西,但主要内容如下:

application: didFinishLaunchingWithOptions:

self.contentDataSource = [[MYContentDataSource alloc] init];
self.contentDelegate = [[MYContentDelegate alloc] init];
MPPlayableContentManager *contentManager = [MPPlayableContentManager sharedContentManager];
contentManager.dataSource = self.contentDataSource;
contentManager.delegate = self.contentDelegate;
[contentManager beginUpdates];
[contentManager endUpdates];

我使用了内容管理器的beginUpdates endUpdatesreloadData方法,但这些方法都没有导致实际调用内容数据源。

我在数据源中实现了numberOfChildItemsAtIndexPathcontentItemAtIndexPath,这似乎是正确调用的,尽管只是在新模拟器上首次启动应用时。

要点:

- (NSInteger)numberOfChildItemsAtIndexPath:(NSIndexPath *)indexPath {
    return 3;
}

- (MPContentItem *)contentItemAtIndexPath:(NSIndexPath *)indexPath {
    NSUInteger categoryId = [indexPath indexAtPosition:0];
    MPContentItem *contentItem = [[MPContentItem alloc] initWithIdentifier:[NSString stringWithFormat:@"CAT-%lu", (unsigned long)categoryId]];
    contentItem.title = [NSString stringWithFormat:@"Category %lu", (unsigned long)categoryId];
    contentItem.subtitle = @"Subtitle";
    contentItem.playable = NO;
    contentItem.container = YES;
}

我也尝试保留(或不保留)对MPPlayableContentManager的引用。

我在实际的主机上有相同的行为。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

将我的头撞到墙上一段时间之后,我得到了Apple的以下答案。事实证明,CarPlay需要MPRemoteCommandCenterMPNowPlayingInfoCenter才能正常工作。

1. Start responding to MPRemoteCommandCenter events at app launch
2. Set the MPNowPlayingInfoCenter dictionary at app launch

These are required for MPPlayableContentDataSource to function correctly.

在doc中提到了它们,但目前尚不清楚它们是否需要目录显示才能工作。这解决了这个问题。