Swift: NFCError Code = 202 "Сессия неожиданно признана недействительной" - PullRequest
1 голос
/ 20 июня 2019

Я пытаюсь использовать NFC. Я следовал за этими шагами:

  • Включен NFC в конфигурации AppID 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)
                }
    }
}

Почему я продолжаю получать сообщение «Error Domain = NFCError Code = 202» Сеанс неожиданно признан недействительным «UserInfo = {NSLocalizedDescription = Сеанс неожиданно признан недействительным}»?

1 Ответ

0 голосов
/ 20 июня 2019

Я не уверен, но ниже строки вызывает эту ошибку 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?
...