我试图从ISO-15693 NFC标记读取多个块,每当我开始读取它时,我就会得到这个错误。
Domain=NFCError Code=102“标记响应错误”UserInfo={NSLocalizedDescription=Tag响应错误,ISO15693TagResponseErrorCode=2}
我就是这么读的
tagHandler(NFCISO15693Tag.self, arguments, result) { tag in
let requestFlags = getRequestFlags(arguments["requestFlags"] as! [String])
let blockNumber = arguments["blockNumber"] as! Int
let numberOfBlocks = arguments["numberOfBlocks"] as! Int
tag.readMultipleBlocks(requestFlags: requestFlags, blockRange: NSMakeRange(blockNumber, numberOfBlocks)) { dataBlocks, error in
if let error = error {
result(getFlutterError(error))
} else {
result(dataBlocks)
}
}
}不过,我通过将请求标志更改为.highDataRate来读取单个块,但此更改对readMultipleblocks命令没有帮助。
tagHandler(NFCISO15693Tag.self, arguments, result) { tag in
let requestFlags = getRequestFlags(arguments["requestFlags"] as! [String])
let blockNumber = arguments["blockNumber"] as! UInt8
tag.readSingleBlock(requestFlags: [.highDataRate], blockNumber: blockNumber) { dataBlock, error in
if let error = error {
result(getFlutterError(error))
} else {
result(dataBlock)
}
}
}我找不到关于从ISO-15693标签读取多个块的示例或资源,所以任何信息或示例都会有帮助!谢谢!
发布于 2021-11-19 09:41:27
因此,通过使用带有异步线程的readSingle块,我设法找到了一个解决办法。读取50个街区大约需要0.6秒。我不太熟悉快速语言,所以我敢打赌这可能会得到更好的优化。
@available(iOS 13.0, *)
private func handleIso15693ReadSingleBlock(_ arguments: [String : Any?], result: @escaping FlutterResult) {
tagHandler(NFCISO15693Tag.self, arguments, result) { tag in
let accessQueue = DispatchQueue(label: "NFCManager.accessQueue")
let blockCount = arguments["blockNumber"] as! UInt8
var dataBlocks = [Data]()
let group = DispatchGroup()
group.enter();
for i in 3...blockCount{
accessQueue.async {
tag.readSingleBlock(requestFlags: [.highDataRate], blockNumber: UInt8(i)) { dataBlock, error in
if let error = error {
result(getFlutterError(error))
} else {
dataBlocks.append(dataBlock)
if (i == blockCount){
group.leave();
}
}
}
}
}
group.wait()
group.notify(queue: .main) {
result(dataBlocks)
}
}
}https://stackoverflow.com/questions/69925645
复制相似问题