Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.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
Cocoa touch 为什么在iOS 4.2.1上检查[NSMetadataQuery类]会崩溃?_Cocoa Touch_Ios4_Nsmetadataquery - Fatal编程技术网

Cocoa touch 为什么在iOS 4.2.1上检查[NSMetadataQuery类]会崩溃?

Cocoa touch 为什么在iOS 4.2.1上检查[NSMetadataQuery类]会崩溃?,cocoa-touch,ios4,nsmetadataquery,Cocoa Touch,Ios4,Nsmetadataquery,我正在尝试使用。有了正确的设置,类在适当的时候会自动弱链接。正如Marco所描述的,“您可以安全地创建子类或拥有指向您想要的任何对象的指针(只要您小心不要在它们不可用时实例化它们)” 我的应用程序在iOS 5上运行良好。我遵循了链接中提到的条件: 基本SDK是最新的iOS(iOS 5.1) 部署目标是iOS 4.0 C/C++/Objective-C的编译器是Apple LLVM编译器3.1(也尝试了LLVM GCC 4.2) 每当我引用NSMetadataQuery时,我都会首先确保该类存

我正在尝试使用。有了正确的设置,类在适当的时候会自动弱链接。正如Marco所描述的,“您可以安全地创建子类或拥有指向您想要的任何对象的指针(只要您小心不要在它们不可用时实例化它们)”

我的应用程序在iOS 5上运行良好。我遵循了链接中提到的条件:

  • 基本SDK是最新的iOS(iOS 5.1)
  • 部署目标是iOS 4.0
  • C/C++/Objective-C的编译器是Apple LLVM编译器3.1(也尝试了LLVM GCC 4.2)
每当我引用NSMetadataQuery时,我都会首先确保该类存在:

if ([NSMetadataQuery class] != nil) …
尽管如此,如果我尝试在iOS 4.2.1的iPod touch上运行,我的应用程序在启动时会立即崩溃:

dyld: Symbol not found: _OBJC_CLASS_$_NSMetadataQuery
我已经试着注释掉所有代码,我的应用程序运行正常。只要我添加回对NSMetadataQuery的单个引用,它就会崩溃。我甚至试过:

if ([NSMetadataQuery class] != nil) NSLog(@"OK");
仅仅包括这一行,而没有其他对NSMetadataQuery的引用,就会使应用程序崩溃。更奇怪的是,检查其他iOS 5类不会导致任何问题:

if ([UIDictationPhrase class] != nil) NSLog(@"OK");
正如预期的那样,效果很好


我已经能够使用更丑的
NSClassFromString()
来解决这个问题,以确保该类存在,但我很想知道为什么另一种方法不起作用。

NSMetadataQuery
在iOS 5.0及更高版本中可用,因此下面的任何版本都不知道它是什么。只需在代码中使用它,类名就会添加到符号表中,并在应用程序启动时进行查找。

对此我没有解释,但我遇到了与您相同的问题。无论我/你做什么,NSMetadataQuery都不会弱链接

请参考这个答案,这是另一个问题中最好的答案:

简言之,其他自动弱链接似乎也能起作用,只是
NSMetadataQuery*
必须从源代码中删除并替换为
id
。使用
NSClassFromString()
等实例化该类。其他类(如
UIDocument
等)不会出现问题,因此您可以安全地以正常无汗的方式使用这些类。

如前所述,iOS 4.2 SDK和更高版本中有一个功能,可以自动将需要它的类弱链接起来。我还举了一个例子来说明此功能在哪里正确工作UIDictionPhase类仅在iOS 5.1及更高版本中可用。