我已经申请了在swift 5中写入NFC,写入工作正常,但我只想从nfc更新1个密钥,而不会覆盖完整的NFC卡数据。NFC设备为ISO 14443-3A恩智浦MIFARE Ultralight (Ultralight )。请检查下面的代码,任何人都可以提供帮助。
var payloadData = Data([0x02,0x65,0x6E])
payloadData.append(self.record_to_write.data(using: .utf8)!)
let customTextPayload = NFCNDEFPayload.init(
format: .nfcWellKnown,
type: "T".data(using: .utf8)!,
identifier: Data(),
payload:payloadData
)
self.record_new_arr.append(customTextPayload)
let messge = NFCNDEFMessage.init(records: self.record_new_arr )
tag.writeNDEF(messge, completionHandler: { (error: Error?) in
if nil != error{
session.alertMessage = "Write NDEF message fail: \(error)"
print("Write NDEF message fail: \(error)")
}else{
print("Write NDEF message successfull.")
session.alertMessage = "Write NDEF message successfull."
}
})只需防止使用swift将数据覆盖到nfc中。提前感谢
发布于 2020-07-04 04:53:15
NDEF格式并不是真正设计为附加到卡上或直接在卡上更新的。
由于使用TLV记录的数据的结构
T=终止符(1字节)
L=长度(1+字节)
V=值(0+字节)(这是要存储的数据)
然后是另一个终结者
然后,在相当多的情况下,要追加/更新,您将不得不重写整张卡或卡的某一大部分,因为长度可能需要更新。
只有极少数情况下,替换现有数据是有意义的。
因此,大多数实现只会写入完整的NDEF消息,覆盖卡上已有的内容,因为要进行更新,您无论如何都必须读取整个消息。
更新NDEF消息的唯一方法是将其读取到您的程序中,更新/附加内存中的记录,将整个内容写回到卡中。
因此,简而言之,您的要求是不可能的(虽然在非常有限的情况下,您可能会自己计算出更改并在Type 2卡上进行更改,但这不适用于其他类型的卡)。
https://stackoverflow.com/questions/62714592
复制相似问题