通过蓝牙在NSDictionaries之间交换数据

时间:2013-03-13 00:33:56

标签: plist core-bluetooth data-exchange

我想要做的是通过蓝牙从一个iPad到另一个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的新手,所以如果可以的话,请稍微关注一下。

2 个答案:

答案 0 :(得分:1)

查看Apple的BTLE Transfer示例代码。它只能在一个方向上共享,但如果需要,您可以轻松扩展它以执行两个方向。

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

答案 1 :(得分:0)

使用核心蓝牙:

在外围方面的适当方法(即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];

在适当的方法中的中央一侧(即外围设备: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];

请注意,如果您希望中心实现读写操作,则无需为外围设备服务创建单独的特性。