如何通过 WiFi/蓝牙发送阵列?

Posted

技术标签:

【中文标题】如何通过 WiFi/蓝牙发送阵列?【英文标题】:How can I send a array by WiFi/Bluetooth? 【发布时间】:2014-06-23 18:14:09 【问题描述】:

我使用多点连接框架

正确发送文本,但我可以发送其他数据

-发送文本:

NSData *dataToSend = [_txtMessage.text dataUsingEncoding:NSUTF8StringEncoding];
NSArray *allPeers = _appDelegate.mcManager.session.connectedPeers;
NSError *error;

[_appDelegate.mcManager.session sendData:dataToSend
                                 toPeers:allPeers
                                withMode:MCSessionSendDataReliable
                                   error:&error];

if (error) 
    NSLog(@"%@", [error localizedDescription]);    


[_txtMessage setText:@""];
[_txtMessage resignFirstResponder];

-接收文本:

-(void)didReceiveDataWithNotification:(NSNotification *)notification
    MCPeerID *peerID = [[notification userInfo] objectForKey:@"peerID"];
    NSString *peerDisplayName = peerID.displayName;

    NSData *receivedData = [[notification userInfo] objectForKey:@"data"];
    NSString *receivedText = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding];


NSMutableArray *arraySongs; 但是如何发送和接收数组呢?

对不起我的英语不好

从注释中添加格式和连续性:

MPMediaQuery *everything = [[MPMediaQuery alloc] init];
NSLog(@"Logging items from a generic query...");
NSArray *itemsFromGenericQuery = [everything items];
for (MPMediaItem *song in itemsFromGenericQuery) 
    NSString *songTitle = [song valueForProperty: MPMediaItemPropertyTitle];
    NSString *artist = [song valueForProperty:MPMediaItemPropertyArtist];
    long totalPlaybackTime = [[song valueForProperty: MPMediaItemPropertyPlaybackDuration] longValue];
    [arraySongs addObject:song];

类型数组

MPMediaQuery * todo = [[alloc MPMediaQuery] init]; 

NSLog(@"elementos de registro de una consulta genérica ..."); NSArray * itemsFromGenericQuery = [Elementos de muebles]; for (MPMediaItem * canción en itemsFromGenericQuery) NSString * songtitle = [canción valueForProperty: MPMediaItemPropertyTitle]; NSString * 艺术家 = [canción valueForProperty: MPMediaItemPropertyArtist]; 大的 totalPlaybackTime = [[canción valueForProperty: MPMediaItemPropertyPlaybackDuration] longValue]; [ArraySongs addObject: 歌曲];

【问题讨论】:

NSArray 包含哪些对象? MPMediaQuery *everything = [[MPMediaQuery alloc] init]; NSLog(@"从通用查询中记录项目..."); NSArray *itemsFromGenericQuery = [所有项目]; for (MPMediaItem *song in itemsFromGenericQuery) NSString *songTitle = [song valueForProperty: MPMediaItemPropertyTitle]; NSString *artist = [歌曲 valueForProperty:MPMediaItemPropertyArtist]; long totalPlaybackTime = [[歌曲 valueForProperty: MPMediaItemPropertyPlaybackDuration] longValue]; [arraySongs addObject:song]; 您可以编辑您的问题以添加更多信息、代码。我在问题中添加了上面的注释代码。 【参考方案1】:

您可以使用 dataWithJSONObject:options:error:NSArray 序列化为 JSON 数据 发送数据 使用JSONObjectWithData:options:error: 恢复到NSArray

这是假设NSArray的所有组件都支持JSON序列化。

对于具有更复杂对象的数组,请使用 NSArchiver 并向尚未实现该协议的任何对象添加对 NSCoding 的支持。

MPMediaItem 符合 NSCoding,因此您可以使用 NSArchiverJSON 进行序列化。

【讨论】:

MPMediaItemNSCoding 一致,因此您可以使用 NSArchiver 但 JSON 进行序列化。

以上是关于如何通过 WiFi/蓝牙发送阵列?的主要内容,如果未能解决你的问题,请参考以下文章

角阵列变化检测

XPC 服务阵列崩溃

为啥我的阵列没有消耗我发送给它的信息?斯威夫特 4

通过蓝牙从 Wear OS 发送 UDP 消息

Symfony 3 通过手机阵列登录

如何旋转 3D 阵列?