2016-03-25 24 views
0

'u kullanmayın. 10.8+ başvuru içeren bir uygulama yazıyorum. Şimdi ben sadeceYalnızca OS X 10.8'de NSURLSession ürününü içe aktarın, ancak

Ben iki http istemci var 10.8 Yukarıdaki os x için NSURLSession kullanabilir ve os x 10.8 için NSURLConnection kullanmak istiyorum. superClass NSURLConnection ile NSURLSessionManager ve httpClientB süperClass ile httpClientA. Sistem sürümünün 10.8'in üzerinde olduğunu kontrol ettiğimde, httpClientB kullanıyorum. istediğim bu.

ama, benim app 10.8 sistemde başlattığınızda, sadece, çökmesine ve sembol ı hiç var os x 10.8 üzerinde, sembol gelmez NSURLSessionTransferSizeUnknown biliyoruz

Dyld Error Message: Symbol not found: _NSURLSessionTransferSizeUnknown Referenced from: path/to/my/app Excepted in: /System/Library/Frameworks/Foundation.framework/Version/C/Foundation

bulamadığını söylüyor ama Bu sembolü kullanacak herhangi bir kod bölümüne girdim. bundan nasıl kurtulabilirim? sadece başlangıçta izin vermeyin ve her şey iyi olacak. (Sanırım)

veya kullanabileceğim herhangi bir çalışma zamanı hile/kontrol var mı?

Teşekkürler!

GÜNCELLEME

i zayıf halka kullanarak bu sorunu çözmüş veya pch dosyasında NSURLSession @class koydu.

sorun benim .m dosyasında O çalışma zamanı kontrolleri yaptık

@import <3rd-part-lib1.h> @import <3rd-part=lib2.h> - (void)someMethod:() { if (above 10.8) { do staffs with a 3-rd part library's object whose superClass is NSURLSession } else { do staffs with a 3-rd part library's object whose superClass is NSURLSession } }

içindedir. ve sadece NSURLSession sınıfına bakmayan bağlantıyı söylemek için @class kullanın. İhtiyacım olduğunda orada olacak. ama 10.8'de NSURSession'ım var ve kullanmayacağım.

cevap

0

Bu zayıf bağlantı ile çözülür. Bir çerçeve zayıf bağlandığında, gerçekte bulunmasa bile, tüm sembolleri, (dışa aktarılan C değişkenleri ve işlevleri de dahil olmak üzere) derlenebilir ve bağlanabilir.

-framework Foundation'u -weak_framework Foundation ile bağlantı seçeneklerinde (veya Xcode UI'deki 'zayıf' bayrağını) değiştirin.

Objective-C sınıflarının kullanılabilirliği if ([NSNewClass class]) ile test edilebilir.

Dışa aktarılan C sembollerinin kullanılabilirliği if (&NSURLSessionTransferSizeUnknown != NULL) ile test edilmelidir.

!= NULL yazmanız gerektiğini unutmayın, bir nedenle (en iyileştirici?) Sadece if (&NSURLSessionTransferSizeUnknown) kullanamazsınız.

+0

bunun ne demek istediğimi değil. cevabımı gör :) – sunus

0

Hangi OS X sürümünün çalıştığını belirlemek için NSAppKitVersionNumber kullanabilirsiniz. Bunun gibi

if (NSAppKitVersionNumber > NSAppKitVersionNumber10_8) 
{ 
    execute code related to OS X 10.9 and higher 
}