2011-07-27 1 views
3

デバイスのiOSプラットフォームに存在する場合:チェックオーバーロードメソッドは、ALAssetsLibraryクラスで2 "writeImageToSavedPhotosAlbum" の方法があります

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

のiOS 4.0の

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

は(利用可能(4.1以降のiOSで利用可能) +)

私のコードで1番目のもの(iOS 4.1が必要)を使用していて、iOS 4.0デバイスでクラッシュします。 respondsToSelectorを使用して、どのメソッドがサポートされているかを確認しようとしていますが、セレクターがパラメータではなくメソッド名のみをチェックするように見えます。

私はいくつかの提案を読んで、それは純粋にOSのバージョンをチェックすることで良いかもしれないと感じるので、この問題を解決するのに役立つrespondstoselectorに類似したものはありますか?

+0

パラメータとはどういう意味ですか?そして今、あなたはそれをどのように実装しましたか? –

答えて

7

Objective-Cメソッドの命名システムを誤解しています。セレクタは、すべてfoo:bar:baz:の組み合わせであり、の組み合わせです。 この場合、writeImageToSavedPhotosAlbumというメソッドはありません。最初のものは、セレクタとして、ある

@selector(writeImageToSavedPhotosAlbum:metadata:completionBlock:) 

に対応し、もう一つは、あなたのコードで

@selector(writeImageToSavedPhotosAlbum:orientation:completionBlock:) 

で、第1のセレクタは

if([obj respondsToSelector:@selector(writeImageToSavedPhotosAlbum:metadata:completionBlock:)]){ 
     .... 
} 
のように、利用可能であるか否かをチェック

これは、最初のものが使用可能かどうかを区別する必要があります。

0

次に、osバージョンで区別することができます。どうですか?

7

これらのメソッドには名前が異なるため、これらのメソッドは別々にテストできます。

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

もう1つをテストする場合は、@selector(writeImageToSavedPhotosAlbum:orientation:completionBlock:)を使用します。

関連する問題