首页 > 解决方案 > NFC CORE iOS:在同一个会话中读取NDEF、修改数据和WriteNDEF

问题描述

在我的应用程序中,我想从NFC Tag接收数据,修改此数据并将其写回 TagNFC 协议有 5 个阶段要做:

当我在阅读后修改文本有效负载时,此修改无法通过 WriteNDEF(myMessage) 看到,并且在标签中写入了我在 QueryStatus 阶段初始化的消息。

重要的字符串 08、18 和 50

使用字符串 50 中的命令后,我已修改并打包到消息有效负载,但在标签中写入了另一个字符串 08 或 18

        func readerSession(_ session: NFCNDEFReaderSession, didDetect tags: [NFCNDEFTag]) {  
            let tag = tags.first!  
            var password: UInt16 = 0  
            var mess: String = ""  
            var ToSend: String = "http://" //somehttp  
            var textPayload = NFCNDEFPayload.wellKnownTypeURIPayload(string: ToSend)  
            print("Payload -1 ->\(textPayload)")  
//08//      var myMessage = NFCNDEFMessage(records: [textPayload!]) //When session was finished, writed this one  
            print("Packed! -1 ->\(myMessage)")  
           // 3  
            session.connect(to: tag) { (error: Error?) in  
               if error != nil {  
                session.restartPolling()  
               }  
            }  
           // 4  
           tag.queryNDEFStatus() { (status: NFCNDEFStatus, capacity: Int, error: Error?) in  
//18//     // myMessage = NFCNDEFMessage(records: [textPayload!]) //or this one, if it wiil be here  
               if error != nil {  
                session.invalidate(errorMessage: "Fail to determine NDEF status.  Please try again.")  
                   return  
               }  
               if status == .readOnly {  
                    session.invalidate(errorMessage: "Tag isnt writable")  
               } else if status == .readWrite {  
                   // 5  
                print ("READ-WRITE!")  
               } else {  
                    session.invalidate(errorMessage: "Isnt NDEF.")  
               }  
       } //tag.queryNDEFStatus  

        print("before read")  
        tag.readNDEF(completionHandler: { (message: NFCNDEFMessage?, error: Error?) in  
            print("inside read")  
            var statusMessage: String  
            if nil != error || nil == message {  
                statusMessage = "Fail to read NDEF from tag"  
                print(statusMessage)  
            } else {  
                statusMessage = "Found 1 NDEF message"  
                print(statusMessage)  
                let payload = message!.records.first  
                mess = String(data: payload!.payload.advanced(by: 1), encoding: .ascii)!  
                    //some modification of readed text  
                    //and assignment to String toSend  
                    textPayload = NFCNDEFPayload.wellKnownTypeURIPayload(string: ToSend)  
    //                print("ToSend -2: \(ToSend)")  
                    print("PayLoad -2 ->\(textPayload)")  
//50//              myMessage = NFCNDEFMessage(records: [textPayload!]) // BUT NOT THIS ONE !! :(  
                    print("Packed! -2 -> \(myMessage)")  
               //session.alertMessage = statusMessage  
                    }  
                }) //tag.readNDEF  
                print("before write")  
                tag.writeNDEF(myMessage) { (error: Error?) in  
               if error != nil {  
                session.invalidate(errorMessage: "Update tag failed. Please try again.")  
                print("Update tag failed. Please try again.")  
               } else {  
                print("Packed! -3 -> \(myMessage)")  
                session.alertMessage = "Good Job-s!"  
                print ("Good Job-s!")  
                   // 6  
                session.invalidate()  
               }  
           } //tag.writeNDEF  

    }  


    }  

标签: iosswiftnfcpayloadcore-nfc

解决方案


推荐阅读