0

我制作了一个 iOS 应用程序,它从 BLE 信标接收 RSSI 值并通过 wifi 将其发送(使用 GCDAsynSocket)到连接的 MacBook。我在 MacBook 上的下一个应用程序接收 RSSI 值并以 .txt 格式保存(使用 NSOutpuStream 类)。现在,我需要从八个不同的 BLE 信标发送 RSSI 值,并以键/值对的形式发送它们各自的 MAC 地址。我尝试使用 NSKeyedArchiver 将 NSDictionary 编码为 NSData 来解决它。

NSData *data = [NSKeyedArchiver archivedDataWithRootObject: NSDictionaryContaningKeyValuePair];

在接收器端(MacBook),我使用 NSUNarchiver 进行解码。我无法提取包含键/值(MAC 地址/RSSI 值)对的 NSDictionary 并将其存储到 .txt 文件中。此外,由于 NSoutputStrteam 写入方法采用非空 const uint8_t 值,我如何在 .txt 文件中写入键/值对?我使用 Objective-C 和 Xcode (7.0)。

谢谢你。

4

1 回答 1

0

得到了解决方案。NSDictionary 可以使用 NSJSONSerialization 类发送。在发射器端(iOS):

NSDictionary* dictInfo = [NSDictionary dictionaryWithObjectsAndKeys:self.txtInfo.text,@"data", nil];
NSData* dataDict = [NSJSONSerialization dataWithJSONObject:dictInfo options:NSJSONWritingPrettyPrinted error:nil];
[self.socket writeData:dataDict withTimeout:-1.0f tag:0];

在接收器端(MacBook):

 if ([self getSelectedSocket]== sock) {
    [_dataBuffer appendData:data];
    if ([sock socketAvailableBytes] == 0) {
        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:_dataBuffer options:NSJSONReadingMutableLeaves error:nil];
        DLog("Dictionary Info: %@", dict);
        NSString* strInfo =  (NSString*)[dict objectForKey:@"data"];
        [_dataBuffer setLength:0];
        self.txtLogs.stringValue= strInfo;

如需更多信息,请访问https://github.com/boobalaninfo/Bonjour-iOS-MAC-Apps

于 2017-03-24T01:51:07.750 回答