В моем приложении я хочу получить данные от NF C Tag , изменить эти данные и записать их обратно в Tag . NF C ПРОТОКОЛ имеет 5 этапов:
- isAvailable
QueryStatus
ReadNDEF
- WriteNDEF
- WriteLock
Когда я изменил текстовую полезную нагрузку после чтения, эта модификация не может быть видна по WriteNDEF (myMessage) , и в тег записывает сообщение, которое я инициализировал на этапе QueryStatus.
Важные строки 08, 18 и 50
После , используя команду в строке 50 , я изменил и запаковал в полезную нагрузку сообщения, но в тег записал еще одну из строки 08 или 18 .
func readerSession(_ session: NFCNDEFReaderSession, didDetect tags: [NFCNDEFTag]) {
let tag = tags.first!
var password: UInt16 = 0
var mess: String = ""
var ToSend: String = "http://" //somehttp
var textPayload = NFCNDEFPayload.wellKnownTypeURIPayload(string: ToSend)
print("Payload -1 ->\(textPayload)")
//08// var myMessage = NFCNDEFMessage(records: [textPayload!]) //When session was finished, writed this one
print("Packed! -1 ->\(myMessage)")
// 3
session.connect(to: tag) { (error: Error?) in
if error != nil {
session.restartPolling()
}
}
// 4
tag.queryNDEFStatus() { (status: NFCNDEFStatus, capacity: Int, error: Error?) in
//18// // myMessage = NFCNDEFMessage(records: [textPayload!]) //or this one, if it wiil be here
if error != nil {
session.invalidate(errorMessage: "Fail to determine NDEF status. Please try again.")
return
}
if status == .readOnly {
session.invalidate(errorMessage: "Tag isnt writable")
} else if status == .readWrite {
// 5
print ("READ-WRITE!")
} else {
session.invalidate(errorMessage: "Isnt NDEF.")
}
} //tag.queryNDEFStatus
print("before read")
tag.readNDEF(completionHandler: { (message: NFCNDEFMessage?, error: Error?) in
print("inside read")
var statusMessage: String
if nil != error || nil == message {
statusMessage = "Fail to read NDEF from tag"
print(statusMessage)
} else {
statusMessage = "Found 1 NDEF message"
print(statusMessage)
let payload = message!.records.first
mess = String(data: payload!.payload.advanced(by: 1), encoding: .ascii)!
//some modification of readed text
//and assignment to String toSend
textPayload = NFCNDEFPayload.wellKnownTypeURIPayload(string: ToSend)
// print("ToSend -2: \(ToSend)")
print("PayLoad -2 ->\(textPayload)")
//50// myMessage = NFCNDEFMessage(records: [textPayload!]) // BUT NOT THIS ONE !! :(
print("Packed! -2 -> \(myMessage)")
//session.alertMessage = statusMessage
}
}) //tag.readNDEF
print("before write")
tag.writeNDEF(myMessage) { (error: Error?) in
if error != nil {
session.invalidate(errorMessage: "Update tag failed. Please try again.")
print("Update tag failed. Please try again.")
} else {
print("Packed! -3 -> \(myMessage)")
session.alertMessage = "Good Job-s!"
print ("Good Job-s!")
// 6
session.invalidate()
}
} //tag.writeNDEF
}
}