2011-07-27 97 views
3

有2 「writeImageToSavedPhotosAlbum」 方法在ALAssetsLibrary類別:檢查過載的方法在設備iOS平臺存在

- (void)writeImageToSavedPhotosAlbum:(CGImageRef)imageRef 
          metadata:(NSDictionary *)metadata 
        completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock 

(用於iOS 4.1+)用於iOS 4.0

- (void)writeImageToSavedPhotosAlbum:(CGImageRef)imageRef 
         orientation:(ALAssetOrientation)orientation 
        completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock 

( +)

我在代碼中使用第一個(需要iOS 4.1),它會在iOS 4.0設備上崩潰。我試圖使用respondsToSelector來檢查支持哪種方法,但看起來像選擇器只檢查方法名稱,而不是參數。

我看了一些建議,覺得它可能不好,純粹檢查操作系統版本,所以有什麼類似於respondstoselector,可以幫助我解決這個問題?

+0

你是什麼意思的參數?你現在怎麼實現它? –

回答

7

您誤解了Objective-C方法的命名系統。選擇器是所有的組合foo:bar:baz:組合。 因此,在這種情況下,沒有方法稱爲writeImageToSavedPhotosAlbum。第一個是,作爲選擇,對應於

@selector(writeImageToSavedPhotosAlbum:metadata:completionBlock:) 

,第二個是

@selector(writeImageToSavedPhotosAlbum:orientation:completionBlock:) 

在代碼中,檢查第一選擇器是否可用或沒有,如在

if([obj respondsToSelector:@selector(writeImageToSavedPhotosAlbum:metadata:completionBlock:)]){ 
     .... 
} 

這應該區分第一個是否可用。

0

然後你可以用os版本來區分它們。這個怎麼樣?

7

這些方法有不同的名稱,所以你可以單獨測試它們。

if ([assetsLibrary respondsToSelector: 
    @selector(writeImageToSavedPhotosAlbum:metadata:completionBlock:)]) { 
    // Now you can safely use this method. 
} 

如果你想測試另一個你會使用@selector(writeImageToSavedPhotosAlbum:orientation:completionBlock:)