iPhone iCloud 应用程序在 iOS 4 上编译时崩溃

发布于 2024-12-11 03:42:00 字数 139 浏览 0 评论 0原文

我想使用 iCloud,但是当我在 iOS 4.3 模拟器上编译该应用程序时,它崩溃了。

dyld: 未找到符号:_OBJC_CLASS_$_NSMetadataQuery

我应该怎样做才能使其在 iOS 3、4 和 5 上工作?

I'd like to use an iCloud, but when I compile the app on iOS 4.3 Simulator it crashes.

dyld: Symbol not found: _OBJC_CLASS_$_NSMetadataQuery

What should I do to make it working on iOS 3, 4, and 5?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

℉服软 2024-12-18 03:42:00

我的解决方案是:

NSMetadataQuery 更改为 id: ex

正常 : - (void)loadData:(NSMetadataQuery *)query;
更改为: - (void)loadData:(id)query;

正常:@property(保留,非原子)NSMetadataQuery *查询;
更改为:@property(保留,非原子)id查询;

并检查 iCloud 是否可用:

if ([[NSFileManager defaultManager] respondsToSelector:@selector(URLForUbiquityContainerIdentifier:)]) {
        NSURL *ubiq = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
        if (ubiq) {
            // Code for access iCloud here
        }
    }

当使用 NSMetadataQuery 时:

id _query = [[NSClassFromString(@"NSMetadataQuery") alloc] init];
// Some code here
[_query startQuery];

玩得开心 (^_^)

my sulotion is:

Where have NSMetadataQuery change to id: ex

normal : - (void)loadData:(NSMetadataQuery *)query;
change to: - (void)loadData:(id)query;

normal: @property (retain, nonatomic) NSMetadataQuery *query;
change to: @property (retain, nonatomic) id query;

and check iCloud available:

if ([[NSFileManager defaultManager] respondsToSelector:@selector(URLForUbiquityContainerIdentifier:)]) {
        NSURL *ubiq = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
        if (ubiq) {
            // Code for access iCloud here
        }
    }

When use NSMetadataQuery:

id _query = [[NSClassFromString(@"NSMetadataQuery") alloc] init];
// Some code here
[_query startQuery];

Have fun (^_^)

路还长,别太狂 2024-12-18 03:42:00

通常的方法是使用 iOS 5 SDK 进行编译,并将部署目标设置为您希望其使用的最旧的 iOS 版本。不过,您可以在运行时检查哪些类和方法可用于当前系统。例如,iOS 4 上的用户将无法使用仅随 iOS 5 一起提供的功能。

要检查类的可用性,请执行以下操作:

if ( NSClassFromString(@"NSMetadataQuery") != nil ) {
  //do stuff with NSMetadataQuery here
}

要检查方法的可用性,请执行以下操作:

if ( [myObject respondsToSelector:@selector(doSomething)] ) {
  //call doSomething on myObject
}

The usual way would be to compile it with iOS 5 SDK and setting the deployment target to the oldest iOS Version you'd like it to work with. It's up to you though to check at runtime on which classes and methods are available to the current system. A user on iOS 4 for example will not be able to use functions that only ship with iOS 5.

To check the availability of classes do:

if ( NSClassFromString(@"NSMetadataQuery") != nil ) {
  //do stuff with NSMetadataQuery here
}

To check the availability of methods do:

if ( [myObject respondsToSelector:@selector(doSomething)] ) {
  //call doSomething on myObject
}
淑女气质 2024-12-18 03:42:00

这些 API 已随 ios5 一起启动,因此您无法在模拟器 4 或更低版本上运行它,但为了发布,您可以设置它应该支持的 ios 系列的最低部署目标。

These API has been launched with the ios5 so you cann't run it on the simulator 4 or below but for posting you can set the minimum deployment target of ios family it should support .

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文