Swift:NFCError代码= 202“会话意外失效”

时间:2019-06-20 07:40:51

标签: ios swift nfc

我正在尝试使用NFC。我遵循了这些步骤:

  • 在AppID配置中启用NFC App ID Config

  • 创建了配置文件并安装了它 Provisioning

  • 为目标添加了NFC功能 NFC target NFC target code

  • 在plist文件中添加了隐私说明 Plist

此后,我导入了CoreNFC并实现了这些代码:

@available(iOS 11.0, *)    
    extension EventPreviewViewController: NFCNDEFReaderSessionDelegate {
            func readerSession(_ session: NFCNDEFReaderSession, didInvalidateWithError error: Error) {
                let alert = UIAlertController.withOkButton(andTitle: NSLocalizedString("TitleWarning"), andText: NSLocalizedString("ErrorNFCInvalidate"), okHandler: nil)
                self.present(alert, animated: true, completion: nil)
            }

            func readerSession(_ session: NFCNDEFReaderSession, didDetectNDEFs messages: [NFCNDEFMessage]) {
                // TODO
            }
        }


class EventPreviewViewController: UITableViewController {
@available(iOS 11.0, *)
var nfcSession: NFCNDEFReaderSession {
        return NFCNDEFReaderSession(delegate: self, queue: nil, invalidateAfterFirstRead: true)
    }

    @IBAction func startAccess(_ sender: UIButton) {
    if #available(iOS 11.0, *) {
                    nfcSession.begin()
                } else {
                    let alert = UIAlertController.withOkButton(andTitle: NSLocalizedString("TitleWarning"), andText: NSLocalizedString("ErrorNFCUnsupported"), okHandler: nil)
                    self.present(alert, animated: true, completion: nil)
                }
    }
}

为什么我不断收到“错误域= NFC错误代码= 202“会话意外失效” UserInfo = {NSLocalizedDescription =会话意外失效}”?

2 个答案:

答案 0 :(得分:0)

我不确定但在导致此错误Session is invalidated unexpectedly的行下

当我与CoreNFC合作时,遇到了类似的问题。通过定义为property

对其进行修复
let nfcSession = NFCNDEFReaderSession(delegate: self, queue: DispatchQueue(label: "queueName", attributes: .concurrent), invalidateAfterFirstRead: true)

我建议您需要将nfcSession定义为属性。

var nfcSession: NFCNDEFReaderSession?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    self.nfcSession = NFCNDEFReaderSession(delegate: self, queue: DispatchQueue.global(qos: .background), invalidateAfterFirstRead: false)
    self.nfcSession?.begin()
    return true
}

更新:

您可以为iOS 11定义一个属性,如下所示。

@available(iOS 10.0, *)
    var session: NFCNDEFReaderSession?

答案 1 :(得分:0)

更新ios13 / swift 5.1

a)苹果公司的原始样本有时会失败,并导致同一错误。

https://developer.apple.com/documentation/corenfc/building_an_nfc_tag-reader_app

b)如果失败(似乎是愚蠢的。无论如何..都可以工作。)重启设备。它发生了;(