通过蓝牙在 iOS 中传输音乐

Posted

技术标签:

【中文标题】通过蓝牙在 iOS 中传输音乐【英文标题】:Transferring Music in iOS via Bluetooth 【发布时间】:2016-03-14 03:34:06 【问题描述】:

我已将其设置为可以在 ios 设备之间来回发送音乐,但是每当发送音乐时,接收手机都会收到此错误:

*** 由于未捕获的异常“MPMediaItemCollectionInitException”而终止应用程序,原因:“项目数组不能为空” *** 首先抛出调用栈:

这是我得到错误的方法:

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

它有什么问题或导致此错误的原因是什么?

【问题讨论】:

initWithItems: 的两次调用中哪一个失败了?您进行了哪些调试以确保dict 具有您的代码假定的数据? @rmaddy 分配字典时失败并抛出该错误 在代码的另一边,当我发送数据时,我让它在发送之前打印出它发送的数据,并且在发送之前它是正确的数据 【参考方案1】:

检查可能导致问题的两点: 一:_listOfMusicinit在哪里? 二:你怎么知道[dict objectForKey:@"data"]是一个数组并且有item?

【讨论】:

_listOfMusic 在 ViewController 的 viewDidLoad 方法中初始化 和 [dict objectForKey:@"data"] 是我通过 MultipeerConnectivity 框架实际发送数据时创建的特定数组,因此它绝对是一个数组,并且它前面有项目也发送

以上是关于通过蓝牙在 iOS 中传输音乐的主要内容,如果未能解决你的问题,请参考以下文章

蓝牙传输文件时用的是啥协议?

长城哈佛h5蓝牙音乐怎么打开

iOS:如何在我的音乐应用程序中播放蓝牙耳机中的缓冲音频?

常见的蓝牙耳机音频传输格式都有哪些?

长城h5蓝牙连上怎么没有音乐

是否可以将音乐从 Android/iOS 设备流式传输到桌面设备?