MPPlayableContentDataSource 调用不一致

MPPlayableContentDataSource called inconsistently

我正在努力实现对 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 方法,但其中 none 导致内容数据源实际被调用。

我在数据源中实现了 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 的引用。

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

在我的头撞墙后,我从 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.

文档中提到了它们,但尚不清楚目录显示是否需要它们。那解决了问题。