2011-07-27 3 views
3

장치 아이폰 OS 플랫폼에 존재하는 경우 :를 점검 오버로드 방법은 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:) 

에 해당하고, 두 번째는

if([obj respondsToSelector:@selector(writeImageToSavedPhotosAlbum:metadata:completionBlock:)]){ 
     .... 
} 
에서와 같이, 제 1 선택 사용할 수 있는지 여부를 확인하거나하지, 당신의 코드에서

@selector(writeImageToSavedPhotosAlbum:orientation:completionBlock:) 

입니다

첫 번째 문자를 사용할 수 있는지 여부를 구분해야합니다.

0

그러면 OS 버전으로 구분할 수 있습니다. 어때?

7

이러한 메서드는 서로 다른 이름을 가지므로 별도로 테스트 할 수 있습니다.

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

다른 하나를 테스트하려면 @selector(writeImageToSavedPhotosAlbum:orientation:completionBlock:)을 사용하십시오.

관련 문제