В настоящее время я сталкиваюсь с проблемой реализации конкретной функции в приложении iOS 13 на основе NFC. При чтении тега я хотел бы получить уникальный идентификатор оборудования и сообщение NDEF за один сеанс. До сих пор я проверял различные примеры проектов, в том числе код, предоставленный Apple, и смог получить интересующую меня информацию, но не во время одного сеанса чтения.
Я упростил следующие фрагменты кода, чтобы лучшесосредоточиться на проблеме (пропущенные проверки ошибок и т. д.).
Использование NFCTagReaderSession для получения уникального идентификатора оборудования:
func tagReaderSession(_ session: NFCTagReaderSession, didDetect tags: [NFCTag]) {
let tag = tags.first!
session.connect(to: tag) { (error: Error?) in
if case let .miFare(mifareTag) = tag {
print(mifareTag.identifier as NSData) //this is the info I'm interested in
}
}
}
Однако тип полезной нагрузки записи сообщения, по-видимому, толькодоступно в NFCNDEFReaderSession:
func readerSession(_ session: NFCNDEFReaderSession, didDetect tags: [NFCNDEFTag]) {
let tag = tags.first!
session.connect(to: tag, completionHandler: { (error: Error?) in
tag.queryNDEFStatus(completionHandler: { (ndefStatus: NFCNDEFStatus, capacity: Int, error: Error?) in
tag.readNDEF(completionHandler: { (message: NFCNDEFMessage?, error: Error?) in
var statusMessage: String
if nil != error || nil == message {
statusMessage = "Fail to read NDEF from tag"
} else {
statusMessage = "Found 1 NDEF message"
let payload = message.records.first!
if let type = String(data: payload.type, encoding: .utf8) {
print("type:%@", type) //this is the info I'm interested in
}
}
session.alertMessage = statusMessage
session.invalidate()
})
})
})
}
Как видите, я могу либо получить идентификатор оборудования, используя NFCTagReaderSession, либо тип полезной нагрузки записи сообщения, используя NFCNDEFReaderSession. Я что-то здесь упускаю или действительно нужны две разные сессии чтения, чтобы получить интересующую меня информацию? Заранее спасибо.