Обмен данными между NSDictionaries через Bluetooth

Что я хочу сделать, это обмен данными между списками через Bluetooth с одного iPad на другой. Краткое резюме моей ситуации, у меня есть словарь, который заполняет каждый список с каждого 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, DictionaryG, DictionaryH, DictionaryI), Dictionary2(DictionaryD, DictionaryE, DictionaryF, DictionaryJ, DictionaryK, DictionaryL)))

Скорее всего, я мог бы написать решение, просто мне сложно придумать стратегию. Я довольно новичок в Core Data, так что, пожалуйста, будьте осторожны со мной.

2 ответа

Ознакомьтесь с образцом кода BTLE Transfer от Apple. Это только делит в одном направлении, но вы можете легко расширить его, чтобы сделать оба направления, если это необходимо.

Кроме того, я не думаю, что вам нужны основные данные, если вы просто хотите объединить словари по Bluetooth!

Используя Core Bluetooth:

На периферийной стороне в соответствующем методе (т.е. периферийный менеджер: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];

Обратите внимание, что вам не нужно создавать отдельные характеристики для службы периферийного устройства, если вы хотите, чтобы центральное устройство осуществляло как чтение, так и запись.

Другие вопросы по тегам