Данные теряются при передаче между устройствами. Сомневаюсь, что это действительно потеряно - Уверен, что я делаю что-то не так - но что ?!NSData отсутствуют после отправки на другое устройство
4 ступенчатый подход. Первые 3 шага работают как шарм, и я могу проверить, что данные могут быть проанализированы (перед отправкой). Получаю данные, но не все? При анализе я могу подтвердить тип данных, но не информацию о категории (Пол, Категория, Подкатегория) - почему? Шаги:
- Генерировать и хранения данных (локально)
- Сверить данные хранятся правильно
- Отправка данных на другое устройство (iPhone)
- получающего данные и анализировать информацию -> НЕУДАЧНЫЙ
1. ФОРМИРОВАНИЯ ДАННЫХ
func selectCategories(){
//Fixed data for testing
let gender = "Women"
let category = "Shoes"
let subCategory = "Pumps"
print("SENDING - Gender: \(gender), Category: \(category), SubCategory: \(subCategory)")
sendCategories(gender, category: category, subCategory: subCategory)
}
2. Проверка данных запомненная
func sendCategories(gender: String, category: String, subCategory: String){
var messageCategory = MessageCategory(message: Message(messageType: MessageType.Category), gender: gender, category: category, subCategory: subCategory)
let data = NSData(bytes: &messageCategory, length: sizeof(MessageCategory))
print("SEND - LENGTH: \(data.length)")
// VERIFY DATA STORED SUCCESFULLY (FOR TESTING PURPOSES ONLY)
let messageCategoryFromData = UnsafePointer<MessageCategory>(data.bytes).memory
if messageCategoryFromData.message.messageType == MessageType.Category{
print("SENDING - Gender: \(messageCategoryFromData.gender), Category: \(messageCategoryFromData.category), SubCategory: \(messageCategoryFromData.subCategory)")
let temp_gender = messageCategoryFromData.gender
let temp_category = messageCategoryFromData.category
let temp_subCategory = messageCategoryFromData.subCategory
let message = messageCategoryFromData.message
// SUCCESSFULLY PRINTS THE GENDER ETC WITH CORRECT INFORMATION -> DATA PARSING WORKS PRIOR TO SENDING DATA
print("RECEIVED (PRIOR TO SENDING). Gender: \(temp_gender) Category: \(temp_category) SubCategory: \(temp_subCategory)")
}
else{
print("WRONG MESSAGE TYPE")
}
// SEND THE DATA
sendData(data)
}
3. Передача данных по
func sendData(data: NSData) {
print("SENDING DATA")
var sendDataError: NSError?
let gameKitHelper = GameKitHelper.sharedInstance
if let multiplayerMatch = gameKitHelper.multiplayerMatch {
do {
try multiplayerMatch.sendDataToAllPlayers(data, withDataMode: GKMatchSendDataMode.Reliable)
} catch let error as NSError {
print("Error while sending data: \(error)")
} catch {
print("Catch all errors: \(error)")
}
}
}
4. Прием данных и анализировать информацию (ERROR)
func matchReceivedData(match: GKMatch, data: NSData, fromPlayer player: String) {
var message = UnsafePointer<Message>(data.bytes).memory
if message.messageType == MessageType.Category {
let messageCategory = UnsafePointer<MessageCategory>(data.bytes).memory
print("MESSAGE: \(messageCategory.message)") <-- SUCCESSFUL
print("DATA TYPE: \(messageCategory.message.messageType)") <-- SUCCESSFUL
print("RECEIVED - LENGTH: \(data.length)") <-- SUCCESSFUL
let gender = messageCategory.gender <-- BECOMES NIL
let category = messageCategory.category <-- BECOMES NIL
let subCategory = messageCategory.subCategory <-- BECOMES NIL
delegate?.setCategories(g, category: c, subCategory: s)
print("RECEIVING - Gender: \(gender), Category: \(category), subCategory\(subCategory)")
}
}
Несущие конструкции
enum MessageType: Int {
case RandomNumber, Category, GameBegin, Move, LapComplete, GameOver
}
struct Message {
let messageType: MessageType
}
struct MessageCategory {
let message: Message
let gender: String
let category: String
let subCategory: String
}
Попробуйте изменить на шаге 4: Удалить 'вар сообщение = UnsafePointer (data.bytes) .memory' и добавить туда строку' пусть messageCategory = UnsafePointer (data.bytes) .memory'. Также измените if на 'if messageCategoryFromData.message.messageType == MessageType.Category' –
sunshinejr
Спасибо за предложение @sunshine.Но мне нужно получить первое сообщение 'var message = UnsafePointer (data.bytes) .memory', чтобы проверить, какой тип данных получен, и после этого проанализировать его правильно. Любые другие идеи о том, что может нарушить отправку или получение? –