4

我正在尝试在 iOS 6 上运行我的项目,并且我已经设置了所有适当的构建设置以允许我这样做,但是当我在 iOS 6 上运行时出现此错误:

dyld: Symbol not found: _OBJC_CLASS_$_NSURLSession
  Referenced from: /var/mobile/Applications/8AC09960-A403-413E-B70A-E03DB2AF5844/Flywheel.app/Flywheel
  Expected in: /System/Library/Frameworks/Foundation.framework/Foundation
 in /var/mobile/Applications/8AC09960-A403-413E-B70A-E03DB2AF5844/Flywheel.app/Flywheel

是什么赋予了??iOS 7 运行良好。

4

5 回答 5

16

这里的问题是该符号在 iOS 6 上不可用。因此,您必须通过在 Build Phases -> Link Binary With Libraries 中将其状态设置为“可选”来弱链接 Foundation Framework。

于 2013-09-30T09:31:14.197 回答
13

如果您使用的是 cocoapods,请检查您的 Podfile。它可能有

platform :ios, '7.0'

代替

platform :ios, '6.0'
于 2013-09-29T00:05:53.577 回答
6

NSURLSession在 iOS 7 中添加。在您的应用程序中对它的任何不当引用都会在运行 iOS 6 的设备上导致此问题。您需要使用适当的技术来确保在 iOS 6 下永远不会引用该类。

于 2013-09-29T00:11:39.650 回答
0

NSURLSession只是iOS7的东西。遗憾的是,您将不得不在NSURLConnectioniOS 6 中使用旧版本。

于 2013-09-29T02:15:50.410 回答
-1

NSURLSession在 iOS 7 以上可用。您可以在NSURLSession.h.

NS_CLASS_AVAILABLE(10_9, 7_0)
@interface NSURLSession : NSObject

请在检查系统版本或检查该类是否可用之前使用。

if (NSClassFromString(@"NSURLSession") != nil) {
    // available
    // your code
} else {
    // not available
    // other solutions
}

更新

解释:

有的朋友觉得NSClassFromString()不推荐我这里不用。

我同意一半。一般NSClassFromString()不推荐用于新建实例或操作类时。但是我现在使用来判断类是否可用(is nilor not),并且我不产生带有字符串的类指针。

我相信有时我们可以灵活一些。

无论如何,如果您不喜欢 use NSClassFromString(),我终于找到了一种更好的方法来检查该类是否可用:

if ([NSURLSession class]) {
    // available
} else {
    // not available
}
于 2013-09-29T07:26:12.513 回答