You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

iOS 13.2下CoreNFC扫描报错:Session意外失效求助

CoreNFC Session Invalidated with NFFieldNotification Decoding Error (Code 202)

我之前碰到过完全一样的问题,这个错误的核心原因是你的代码缺少了iOS 13+ CoreNFC框架新增的外部阅读器检测代理方法,导致系统回调失败触发XPC解码异常,最终让NFC会话直接失效。下面是具体的修复方案和优化建议:

关键错误分析

从你的日志里能定位到核心问题:

Exception caught during decoding of received selector didDetectExternalReaderWithNotification:, dropping incoming message. Exception: Exception while decoding argument 0 (#2 of invocation): Exception: decodeObjectForKey: class "NFFieldNotification" not loaded or does not exist

iOS 13及以上的CoreNFC会在检测到外部NFC阅读器(比如外接的读卡设备)时,尝试调用didDetectExternalReaderWithNotification:代理方法。如果你的代码没有实现这个方法,系统就会抛出解码异常,直接触发NFC会话失效(对应错误码202)。

修复步骤

1. 添加缺失的代理方法

在你的ViewController类中补充实现这个方法,哪怕是空实现也能解决这个问题:

func readerSession(_ session: NFCNDEFReaderSession, didDetectExternalReaderWithNotification notification: Notification) {
    // 可选:添加外部阅读器的提示逻辑,比如打印日志或提示用户
    print("Detected external NFC reader - please use an NFC tag instead")
}

2. 优化Payload解析逻辑(避免崩溃)

你当前代码里的强制解包!存在崩溃风险,如果NFC标签的Payload格式不符合预期,会直接导致APP崩溃。建议改成安全的可选绑定:

func readerSession(_ session: NFCNDEFReaderSession, didDetectNDEFs messages: [NFCNDEFMessage]) {
    var result = ""
    for message in messages {
        for record in message.records {
            // 跳过TNF和类型标识的前3个字节(根据NDEF规范,这部分是元数据)
            let payloadData = record.payload.advanced(by: 3)
            if let payloadString = String(data: payloadData, encoding: .utf8) {
                result += payloadString
            } else {
                result += "[无法解析的内容]"
            }
        }
    }
    DispatchQueue.main.async {
        self.messageLabel.text = result
    }
}

3. 额外排查项

如果添加代理方法后还是有问题,可以试试这些操作:

  • 重启设备:有时候系统的nfcd服务会出现异常,重启后能恢复正常
  • 验证设备兼容性:确保你的设备是iPhone 7及以上(只有这些设备支持CoreNFC)
  • 检查Info.plist配置:确认已经添加NFCReaderUsageDescription权限描述,否则NFC会话根本无法启动
  • 匹配iOS版本:确保你的项目Deployment Target不低于测试设备的iOS版本(建议iOS 13+)

按照这些步骤处理后,你的NFC会话应该就能正常工作了。

内容的提问来源于stack exchange,提问作者Hardik Darji

火山引擎 最新活动