2016-03-14 2 views
0

Je l'ai mis en place à l'endroit où la musique peut être envoyé et revenir entre les appareils iOS, mais chaque fois que la musique est envoyé, le téléphone récepteur reçoit cette erreur:Transfert de musique dans iOS via Bluetooth

*** Terminating app due to uncaught exception 'MPMediaItemCollectionInitException', reason: 'items array must not be empty' *** First throw call stack:

C'est la méthode où j'obtiens l'erreur:

-(void)didReceiveDataWithNotification: (NSNotification *)notification{ 
    MCPeerID *peerID = [[notification userInfo] objectForKey:@"peerID"]; 
    NSString *peerDisplayName = peerID.displayName; 
    NSData *receivedData = [[notification userInfo] objectForKey:@"data"]; 
    //NSLog([[notification userInfo] objectForKey:@"data"]); 
    NSDictionary *dict = (NSDictionary *)[NSKeyedUnarchiver unarchiveObjectWithData:receivedData]; 
    NSString *datatype = [dict objectForKey:@"datatype"]; 
    NSLog(@"hi"); 
    if([datatype isEqualToString:@"musiclist"]){ 
     count++; 
     MPMediaItemCollection *collectionFromPeer = [[MPMediaItemCollection alloc] initWithItems:[(MPMediaItemCollection*)[dict objectForKey:@"data"] items]]; 
     [_listOfMusic addObjectsFromArray:[collectionFromPeer items]]; 
     if(count == [[_appDelegate.mcManager.session connectedPeers] count] + 1){ 
      for(int i=0;i<[_listOfMusic count];i++){ 
       int r1 = arc4random() % [_listOfMusic count]; 
       int r2 = arc4random() % [_listOfMusic count]; 
       [_listOfMusic exchangeObjectAtIndex:r1 withObjectAtIndex:r2]; 
      } 
      MPMediaItemCollection *coll = [[MPMediaItemCollection alloc]initWithItems:_listOfMusic]; 
      [_musicPlayer setQueueWithItemCollection:coll]; 
      NSLog(@"hi3"); 
      [_musicPlayer play]; 
     } 
    } 
} 

Qu'est-ce qui ne va pas ou qu'est-ce qui cause cette erreur?

+0

Lequel des deux appels à 'initWithItems:' échoue? Quel débogage avez-vous fait pour vous assurer que 'dict' a les données que votre code suppose? – rmaddy

+0

@rmaddy Il échoue et jette cette erreur lors de l'attribution dict – user2537376

+0

De l'autre côté du code, lorsque j'envoie les données, je l'ai imprimer les données qu'il envoie juste avant qu'il envoie, et ce sont les données correctes avant qu'il est envoyé – user2537376

Répondre

0

Vérifiez les deux points qui peuvent causer le problème:
Un: où est _listOfMusic init?
Deux: comment savez-vous [dict objectForKey:@"data"] est un tableau et a des articles?

+0

_listOfMusic est initialisé dans la méthode viewDidLoad du ViewController – user2537376

+0

et [dict objectForKey: @ "data"] est un tableau spécifique que j'ai créé lorsque j'envoie les données via le framework MultipeerConnectivity, donc c'est définitivement un tableau, et il a des objets juste avant qu'il n'envoie aussi – user2537376