【问题标题】:Exchanging data between NSDictionaries via bluetooth通过蓝牙在 NSDictionaries 之间交换数据
【发布时间】:2013-03-13 00:33:55
【问题描述】:

我想做的是通过蓝牙在 plist 之间交换数据,从一台 iPad 到另一台。我的情况的简短摘要,我有字典,每个 plist 从每个 iPad 填充,它有点像这样:

iPad1 会有:MAINdictionary(dictionary1(dictionaryA, dictionaryB, dictionaryC), dictionary2(dictionaryD, dictionaryE, dictionaryF))

iPad2 会有:MAINdictionary(dictionary1(dictionaryG, dictionaryH, dictionaryI), dictionary2(dictionaryJ, dictionaryK, dictionaryL))

括号表示字典包含括号内的项目。我希望我的最终结果是两台 iPad 都是彼此的克隆,并包含一个包含所有数据的更新列表,如下所示:

MAINdictionary(dictionary1(dictionaryA, dictionaryB, dictionaryC, dictionaryG, dictionaryH, dictionaryI), dictionary2(dictionaryD, dictionaryE, dictionaryF, dictionaryJ, dictionaryK, dictionaryL))

我很可能会编写解决方案,但我很难想出一个策略。我对 Core Data 还很陌生,所以如果可以的话,请对我放轻松一点。

【问题讨论】:

    标签: plist core-bluetooth data-exchange


    【解决方案1】:

    查看来自 Apple 的 BTLE Transfer 示例代码。它只在一个方向上共享,但如果需要,您可以轻松地将其扩展到两个方向。

    另外,如果您只想通过蓝牙合并字典,我认为您不需要核心数据!

    【讨论】:

      【解决方案2】:

      使用核心蓝牙:

      在适当的方法中的外围端(即 peripheralManager:didReceiveReadRequest:)

      NSError *error = nil;
      NSDictionary *dictionary = [NSDictionary dictionaryWithObject:anObject forKey:@"key"];
      NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionary options:NSJSONWritingPrettyPrinted error:&error];
      if (error) {
          //respond to error appropriately
      }
      request.value = jsonData;
      [peripheral respondToRequest:request withResult:CBATTErrorSuccess];
      

      在适当方法中的 Central 侧(即 peripheral:didUpdateValueForCharacteristic:error:)

      NSError *error = nil;
      NSData *jsonDataFromPeripheral = characteristic.value;
      NSDictionary *theDictionary = [NSJSONSerialization JSONObjectWithData: jsonDataFromPeripheral options: NSJSONReadingAllowFragments error:&error];
      if ([theDictionary objectForKey:@"key"]) {
          NSLog(@"Success!");
      }
      

      如果您想向外围设备发送数据,那么您可以像这样写入已发现的特征:

      NSError *error = nil;
      NSDictionary *dictionary = [NSDictionary dictionaryWithObject:anObject forKey:@"key"];
      NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionary options:NSJSONWritingPrettyPrinted error:&error];
      [peripheral writeValue:jsonData forCharacteristic:characteristic type:CBCharacteristicWriteWithResponse];
      

      确保设置了外围设备的特性,以便可以执行读取和写入。您在创建 CBMutableCharacteristic 时执行此操作。这是一个例子:

      CBMutableCharacteristic *characterisitic = [[CBMutableCharacteristic alloc]initWithType:[CBUUID UUIDWithString:CHARACTERISTIC_STRING] properties:CBCharacteristicPropertyRead|CBCharacteristicPropertyWrite value:nil permissions:CBAttributePermissionsReadable|CBAttributePermissionsWriteable];
      

      请注意,如果您希望中心同时实现读取和写入,则不必为外围设备的服务创建单独的特征。

      【讨论】:

        猜你喜欢
        • 2013-02-28
        • 1970-01-01
        • 1970-01-01
        • 2013-09-23
        • 2019-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多