Ошибка при работе на iOS 6, но не 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 работает отлично.

5 Solutions collect form web for “Ошибка при работе на iOS 6, но не iOS 7”

Проблема здесь в том, что этот символ недоступен на iOS 6. Таким образом, вам нужно слабо связать Foundation Framework, установив его статус «необязательно» в «Сборка фаз» -> «Связывание двоичных файлов с библиотеками».

Если вы используете cocoapods, проверьте свой подфайл. Он может иметь

 platform :ios, '7.0' 

вместо

 platform :ios, '6.0' 

NSURLSession был добавлен в iOS 7. Любая неправильная ссылка на него в вашем приложении вызовет эту проблему при запуске на устройстве с iOS 6. Вам нужно использовать надлежащие методы, чтобы гарантировать, что класс никогда не ссылается в iOS 6.

NSURLSession – это только iOS7. К сожалению, вам придется использовать старый добрый NSURLConnection с iOS 6.

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() не рекомендуется при использовании для нового экземпляра или для работы с классом. Но теперь я использую, чтобы судить, доступен ли класс ( nil или нет), и я не создаю указатель класса со строкой.

Я считаю, что иногда мы можем быть гибкими.

В любом случае, если вам не нравится использовать NSClassFromString() , я наконец нашел лучший способ проверить, доступен ли класс:

 if ([NSURLSession class]) { // available } else { // not available } 
Interesting Posts
PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.