2013-09-29 63 views
4

我想在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或更少,並且需要爲應用中的所有代碼(包括您正在導入的庫)正確設置它。 –

回答

13

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

platform :ios, '7.0' 

,而不是

platform :ios, '6.0' 
6

NSURLSession在iOS的7加入任何不當引用它在你的應用程序時,與iOS 6的設備你需要運行將導致此問題使用適當的技巧以確保iOS 6下不會引用該類。

0

NSURLSession僅適用於iOS7。不幸的是,你將不得不在iOS 6上使用舊的NSURLConnection

-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 
} 

UPDATE

說明:

有些朋友認爲NSClassFromString()不建議不用我在這裏使用它。

我同意一半。通常,在使用新的實例或操作類時,不建議使用NSClassFromString()。但我現在用來判斷類是否可用(是否爲nil),並且我不會生成帶有字符串的類指針。

我相信有時候我們會變得靈活。

無論如何,如果你不喜歡使用NSClassFromString(),我終於找到了一個更好的辦法來檢查類是可用的:

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

NSClassFromString()不再是推薦的技術。 –

+0

通常,在使用新實例或操作類時,不建議使用NSClassFromString()。但是......我現在用來判斷這個類是否可用(是否爲零),並且我不會生成一個帶有字符串的類指針。有時我們可以變得靈活。 – klaudz

+0

危險投入到這種情況下,只是不應該用類 – pfrank

16

這裏的問題是這個符號是不適用於iOS 6 。所以你必須通過在構建階段 - >與庫鏈接二進制文件中將其狀態設置爲「可選」來弱鏈接Foundation Framework。

+1

來這是解決我的問題。 Xcode/Cocoapods似乎突然開始給我這個錯誤。弱連接Foundation.Framework是我可以繼續使用AFNetworking 2.0.x並支持iOS 6.0+部署的唯一途徑。 – TWright

+0

謝謝,這解決了這個問題。 – Engnyl

相關問題