【问题标题】:iphone iCloud app crashes when compiling on iOS 4iphone iCloud 应用程序在 iOS 4 上编译时崩溃
【发布时间】:2011-12-11 16:31:37
【问题描述】:

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

dyld:未找到符号:_OBJC_CLASS_$_NSMetadataQuery

我应该怎么做才能让它在 iOS 3、4 和 5 上运行?

【问题讨论】:

    标签: iphone compiler-errors icloud


    【解决方案1】:

    我的建议是:

    NSMetadataQuery 在哪里更改为 id: ex

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

    正常:@property (retain, nonatomic) NSMetadataQuery *query; 改为:@property (retain, nonatomic) id query;

    并检查可用的 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];
    

    玩得开心(^_^)

    【讨论】:

    • 这里的重要部分是[[NSClassFromString(@"NSMetadataQuery") alloc] init]。你不能使用[NSMetadataQuery alloc]
    【解决方案2】:

    通常的方法是使用 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
    }
    

    【讨论】:

    • 我使用了 NSClassFromString 但这无济于事。我得到同样的错误。
    • 除了 iOS 4.3 和 iOS 5 之外,我不会打扰其他任何东西。有很多东西是 3 中没有的。此外,在应用商店购买东西的人可能已经更新了手机。跨度>
    • 这篇文章有助于展示用户版本如何分解 Instapaper,一个流行的应用程序 marco.org/2011/11/30/…。短版 - 除非需要,否则不要仅使用 iOS5,但仅使用 iOS4 及更高版本即可。
    【解决方案3】:

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

    【讨论】:

    • 我将 iOS 部署目标设置为 3.0。
    • 然后它会出现问题,直到您不将其发布到应用商店它是应用商店部署目标而不是开发测试目标..
    • 所以我无法在装有 iOS 4 的设备上测试应用?
    • 不,您只能在 ios 5 上开发应用程序并将部署目标放在较低的操作系统上,在应用商店发布后,苹果有责任在这些设备上支持此功能。
    • 我不同意巴鲁的观点。您可以安装 iOS 4 模拟器,然后在那里运行您的应用程序。如果它没有解决你的问题,而不是苹果。当您将最低 IOS 部署目标设置为“最新 iOS”以外的任何内容时,您需要成为经验丰富的开发人员才能使其在旧版本的 iOS 上运行。
    猜你喜欢
    • 1970-01-01
    • 2011-04-20
    • 2014-09-27
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多