簡體   English   中英

在iOS 6上運行時出錯,但在iOS 7上運行時出錯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM