2017-03-23 35 views
0

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

NSData *data = [NSKeyedArchiver archivedDataWithRootObject: NSDictionaryContaningKeyValuePair]; 

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

谢谢。

回答

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

相关问题