MPPlayableContentDataSource调用不一致

问题描述:

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

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]; 

我与内容管理的beginUpdatesendUpdatesreloadData方法玩耍了,但这些结果中的内容数据源实际上被调用。

我已经在数据源中实现了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

我在实际的头部单位上有相同的行为。任何帮助,将不胜感激。

+0

请在https://bugreport.apple.com上提交错误报告。附上您的项目(或一个示例项目)。重现问题,当模拟器仍然启动时运行'xcrun simctl diagnose',然后将输出附加到错误报告。 – russbishop

+0

感谢您的注意 - 我能够在实际的头部单元上重现行为,所以它不是一个模拟器错误 - 大概是我的代码中的某个错误。我会尝试构建一个示例项目来确认,如果它没有重新生成,则会提交一个错误。现在正在处理另一个项目,但应该尽快回复。 – Tad

+0

如果您仍然需要帮助,我会很感兴趣,我有CarPlay的经验。请伸出手。 –

把我的头靠在墙上撞了很长一段时间之后,我从苹果那里得到了以下答案。事实证明,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. 

它们在文档中提到,但目前还不清楚它们是否需要使目录显示工作。这解决了问题。