我正在我的应用程序中实现新功能,该功能应允许用户扫描 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);
}
}];
}
}];
}
}];
}
}];
}
我不知道它有什么问题。有没有人有类似的问题?
谢谢
马特