【发布时间】:2021-09-07 17:44:29
【问题描述】:
我正在构建一个 NFC 读写应用程序。我使用此代码在标签上编写 URL:
private func writeTag(_ tag: NFCNDEFTag, for session: NFCReaderSession?) {
guard let payload = "\u{02}en\(self.url ?? "")".data(using: .utf8) else {
session!.invalidate()
return
}
let record = NFCNDEFPayload(format: .nfcWellKnown, type: Data(), identifier: Data(), payload: payload)
let myMessage = NFCNDEFMessage.init(records: [record])
tag.writeNDEF(myMessage) { (error) in
if error != nil {
session?.invalidate(errorMessage: "Couldn't write tag")
} else {
session?.alertMessage = "Tag is written successfully"
session!.invalidate()
}
}
}
文笔不错。但是,问题在于有效负载 (URL) 格式。例如,当我使用上面的代码将“https://github.com”写为 URL,然后使用另一个 NFC 应用程序读取我刚刚编写的内容时,我会得到“enhttps://github.co”。所以我确定问题出在这一行:
let payload = "\u{02}en\(self.url ?? "")".data(using: .utf8)
我试过改成:
let payload = (self.url ?? "").data(using: .utf8)
但是,当我再次从另一个应用程序读取我刚刚编写的标签时,我得到的是“https://github.co”而不是“https://github.com”。
我应该如何将我的 URL 转换为数据以使其正常工作?
感谢任何帮助!
【问题讨论】:
-
提示:
NFCNDEFPayload.wellKnownTypeURIPayload