Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios FCNDEFMessage QueryDefStatusWithCompletionHandler::发送到实例的选择器无法识别_Ios_Objective C_Nfc_Phonegap - Fatal编程技术网

Ios FCNDEFMessage QueryDefStatusWithCompletionHandler::发送到实例的选择器无法识别

Ios FCNDEFMessage QueryDefStatusWithCompletionHandler::发送到实例的选择器无法识别,ios,objective-c,nfc,phonegap,Ios,Objective C,Nfc,Phonegap,我正在尝试获取有关NFC标记的一些信息,会话成功启动,读取标记后,我们跳转到以下函数: - (void) readerSession:(NFCNDEFReaderSession *)session didDetectNDEFs:(NSArray<NSObject<NFCNDEFTag> * > *)tags { NSLog(@"NFCNDEFReaderSession didDetectNDEFs"); for (NSObject<NFCNDEFT

我正在尝试获取有关NFC标记的一些信息,会话成功启动,读取标记后,我们跳转到以下函数:

- (void) readerSession:(NFCNDEFReaderSession *)session didDetectNDEFs:(NSArray<NSObject<NFCNDEFTag> * > *)tags {
    NSLog(@"NFCNDEFReaderSession didDetectNDEFs");

    for (NSObject<NFCNDEFTag> *tag in tags) {
        [tag queryNDEFStatusWithCompletionHandler:^(NFCNDEFStatus status, NSUInteger capacity, NSError * _Nullable error) {
            if (!error) {
                NSLog(@"success");
            }
        }];
    }
}
注意:NFCNDEFTag是一个协议,所以它可能与我声明它的方式有关:
NSObject

让我们看看的文档

你有:

- (void)readerSession:(NFCNDEFReaderSession *)session 
       didDetectNDEFs:(NSArray<NFCNDEFMessage *> *)messages;
-(void)readerSession:(NFCNDEFReaderSession*)会话
DidDetectDefs:(NSArray*)消息;

-(void)readerSession:(NFCNDEFReaderSession*)会话
didDetectTags:(NSArray*)标签;
你写道:

- (void)readerSession:(NFCNDEFReaderSession *)session 
        didDetectNDEFs:(NSArray<NSObject<NFCNDEFTag> * > *)tags {

-(void)readerSession:(NFCNDEFReaderSession*)会话
DidDetectDefs:(NSArray*)标记{
这是两者的混合

但在Objective-C中,选择器将是:
readerSession:DidDetectDefs
&
readerSession:didDetectTags:
用于官方版本,而您的是
readerSession:DidDetectDefs
,与第一个版本相同。因此,您为自己的版本引入了编译器和运行时

但它不关心参数的类型,因此它不是正确的对象,因此它没有实现方法
queryDefStatusWithCompletionHandler:
,因此它会崩溃并显示错误消息

如何修复它


实现真正的委托方法,使用好的参数类型,使用正确的方法,你不能像那样修改它们。

真正的方法是
-(void)readerSession:(NFCNDEFReaderSession*)session didDetectDefs:(NSArray*)messages;
,您有一个
NFCNDEFMessage
数组,而不是
NFCNDEFTag
。除非您在其上添加了一个扩展以符合
NFCNDEFTag
,但情况似乎并非如此。谁确切地符合
NFCNDEFTag
标准?因为我准备写入标记,我需要获取标记的对象itself、 我查看了定义,发现这个-
(void)readerSession:(NFCNDEFReaderSession*)session didDetectTags:(NSArray*)标记API_可用(ios(13.0))API_不可用(watchos、macos、tvos);
并且函数本身实际上正在工作,甚至是for循环。这个问题与NFCNDEFTag有关
- (void)readerSession:(NFCNDEFReaderSession *)session 
        didDetectTags:(NSArray<__kindof id<NFCNDEFTag>> *)tags;
- (void)readerSession:(NFCNDEFReaderSession *)session 
        didDetectNDEFs:(NSArray<NSObject<NFCNDEFTag> * > *)tags {