错误在iOS 6上运行但不在iOS 7

问题描述:

我想在iOS 6上运行我的项目,并且已经设置了所有适当的生成设置以允许我这样做,但是当我在iOS 6上运行时出现此错误:错误在iOS 6上运行但不在iOS 7

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工作正常。

+0

在使用'NSURLSession'的地方显示你的代码。 – rmaddy

+0

一种不公平的评论,我不知道它是NSURLSession(我正在导入的库正在使用它)。 – pfrank

+0

什么是您的部署目标设置?如果您想在iOS 6上运行,需要将其设置为6或更少,并且需要为应用中的所有代码(包括您正在导入的库)正确设置它。 –

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

platform :ios, '7.0' 

,而不是

platform :ios, '6.0' 

NSURLSession在iOS的7加入任何不当引用它在你的应用程序时,与iOS 6的设备你需要运行将导致此问题使用适当的技巧以确保iOS 6下不会引用该类。

NSURLSession仅适用于iOS7。不幸的是,你将不得不在iOS 6上使用旧的NSURLConnection

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 
} 

UPDATE

说明:

有些朋友认为NSClassFromString()不建议不用我在这里使用它。

我同意一半。通常,在使用新的实例或操作类时,不建议使用NSClassFromString()。但我现在用来判断类是否可用(是否为nil),并且我不会生成带有字符串的类指针。

我相信有时候我们会变得灵活。

无论如何,如果你不喜欢使用NSClassFromString(),我终于找到了一个更好的办法来检查类是可用的:

if ([NSURLSession class]) { 
    // available 
} else { 
    // not available 
} 
+0

NSClassFromString()不再是推荐的技术。 –

+0

通常,在使用新实例或操作类时,不建议使用NSClassFromString()。但是......我现在用来判断这个类是否可用(是否为零),并且我不会生成一个带有字符串的类指针。有时我们可以变得灵活。 – klaudz

+0

危险投入到这种情况下,只是不应该用类 – pfrank

这里的问题是这个符号是不适用于iOS 6 。所以你必须通过在构建阶段 - >与库链接二进制文件中将其状态设置为“可选”来弱链接Foundation Framework。

+1

来这是解决我的问题。 Xcode/Cocoapods似乎突然开始给我这个错误。弱连接Foundation.Framework是我可以继续使用AFNetworking 2.0.x并支持iOS 6.0+部署的唯一途径。 – TWright

+0

谢谢,这解决了这个问题。 – Engnyl