2017-08-31 6 views
0

私はCarPlayオーディオアプリケーションのサポートを実装しようとしており、リストをシミュレータに表示しようとしています。私はMPPlayableContentDataSourceを実装しましたが、それは一貫性がないと呼ばれています。これは、シミュレータでアプリが初めて起動されたときに呼び出され、起動時にCarPlayが開いている場合は、空のリストをスクロールして再描画をトリガーすることで、最初のアイテムの表示を行うことができます。 CarPlayはデータソースを呼び出すことができないようですが、その後の起動時には、空の画面またはスピナーの後にメッセージUnable to connect to "AppName"が続きます。私は別のものを試してみましたが、主なポイントは、次のように:MPPlayableContentDataSourceが一貫して呼び出されません

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

application: didFinishLaunchingWithOptions:では、私はコンテンツマネージャの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

注記ありがとうございます - 私は実際のヘッドユニットで動作を再現することができたので、シミュレータのバグではありません - おそらく私のコードのどこかにバグがあります。私は確認するためのサンプルプロジェクトを構築しようとし、もしreproを実行しなければバグを報告します。今すぐ別のプロジェクトで作業していますが、まもなくこれに戻ってください。 – Tad

+0

まだ助けが必要な場合は、CarPlayの経験があると話すことに興味があります。手を差し伸べてください。 –

答えて

0

かなり長い間、私の頭を壁にぶつけた後、私は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. 

彼らはドキュメントに記載されているが、カタログ表示が機能するためにそれらが必要であることが明確ではありません。それが問題を解決しました。

関連する問題