[英]Error when running on iOS 6 but not iOS 7
我試圖在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工作正常。
這里的問題是該符號在iOS 6上不可用。因此,您必須通過在Build Phases - > Link Binary With Libraries中將其狀態設置為“optional”來弱化Foundation Framework的鏈接。
如果您正在使用cocoapods,請檢查您的Podfile。 它可能有
platform :ios, '7.0'
代替
platform :ios, '6.0'
在iOS 7中添加了NSURLSession
。在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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.