1

我想要做的是通过蓝牙从一台 iPad 到另一台,在 plist 之间交换数据。我的情况的简短摘要,我有字典,每个 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 还很陌生,所以如果可以的话,请对我轻松一点。

4

2 回答 2

1

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

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

于 2013-04-17T04:06:42.430 回答
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:错误:)

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];

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

于 2014-04-16T09:28:20.173 回答