0

我正在我的应用程序中实现新功能,该功能应允许用户扫描 NFC 标签。我有一些用于测试的标签,这些标签NFCTagReaderSession发现为 ISO 15693 标签。我能够找到并连接到它,但是,当我尝试使用 -readMultipleBlocksWithRequestFlags:blockRange:completionHandler: mehod 读取存储在标签上的数据时,它不会报告任何错误并且总是返回空(零填充)数据。我试图更改请求标志等,但无论我做什么,它总是返回零数据。标签本身没问题,因为当我用外部 BT 阅读器扫描它时,它发现它的值没问题。连接标签后我正在执行以下操作:

- (void)readISO15693Tag:(id)tag {

    [tag getSystemInfoWithRequestFlag:(RequestFlagHighDataRate) completionHandler:^(NSInteger dsfid, NSInteger afi, NSInteger blockSize, NSInteger blockCount, NSInteger icReference, NSError * _Nullable error) {

        if(!error) {

            /// This prints "DSFId: 0, AFI: 0, Block size: 4, Block count: 28, IC Reference: 1"
            NSLog(@"DSFId: %ld, AFI: %ld, Block size: %ld, Block count: %ld, IC Reference: %ld", (long)dsfid, afi,blockSize, blockCount, icReference);

            NSRange blockRange = NSMakeRange(0, blockCount);

            [tag readMultipleBlocksWithRequestFlags:RequestFlagHighDataRate blockRange:blockRange completionHandler:^(NSArray * _Nonnull dataBlocks, NSError * _Nullable error) {

                NSMutableData *response = [NSMutableData data];

                for(NSData *blockData in dataBlocks) {

                    [response appendData:blockData];
                }

                if(response.length > 0) {

                    NSData *rawData = [response subdataWithRange:NSMakeRange(1, (response.length - 1))];

                    /// Prints Received data: {length = 111, bytes = 0x00000000 00000000 00000000 00000000 ... 00000000 00000000 }
                    NSLog(@"Received data: %@", rawData);
                }


            }];
        }
    }];
}
  }];
        }
    }];
}

我不知道它有什么问题。有没有人有类似的问题?

谢谢

马特

4

1 回答 1

0

好的,我已经想通了。我只是对外部 RFID 扫描仪返回一些数据感到困惑,而我可以看到- readMultipleBlocksWithRequestFlags:...方法返回的空数据。原来,RFID 扫描仪只是返回标签的 UID,它实际上并没有读取标签的内容。我试图阅读的标签实际上是空的。

所以这个问题可以放心地忽略。

最好的

马特

于 2020-05-15T16:17:02.213 回答