2012-11-01 6 views
3

이것은 매우 기본적인 것일 수 있습니다. 그러나 나는 인터넷 검색을 많이했고 무엇이 잘못되었는지를 파악할 수 없습니다. iOS 앱의 샌드 박스 된 데이터 폴더에서 '카메라 롤'로 이미지를 이동하려고합니다.개체가 선택기에 응답하지 않습니다

UIImageWriteToSavedPhotosAlbum(img,nil,nil,nil)을 사용하면 오류는 발생하지 않지만 사진의 이미지 사본은 저장하지 않습니다.

이유가 무엇인지 알아 내기 위해 아래 (아래)의 선택기를 구현하려고했지만 "MyTest < ..."이라는 이유와 함께 NSInvalidArgumentException을 throw합니다. 선택기 이미지에 응답하지 않습니다. didFinishSavingWithError : contextInfo : "

여기 내 구현 :이 같은 느낌

@implementation MyTest 

- (void) 
    image:(UIImage *) image 
    didFinishSavingWithError: (NSError *) error 
    contextInfo: (void *) contextInfo 
{ 
    //log error or do stuff... 
} 

+ (void) moveToCameraRoll: (NSString *) path 
{ 
    UIImage *img = [[UIImage imageNamed:path] retain]; 

    UIImageWriteToSavedPhotosAlbum(img, 
            self, 
            @selector(image:didFinishSavingWithError:contextInfo:), 
            nil); 
} 

@end 

아마도 매우 기본적인,하지만 난 대답을 찾을 수 없어.

답변

1

+moveToCameraRoll:은 클래스 (즉 정적) 메소드이기 때문에 UIImageWriteToSavedPhotosAlbum 함수의 self 참조는 MyTest 클래스를 가리 킵니다. 사용하려고하는 선택기가 인스턴스 메서드이므로 MyTest의 인스턴스 만 (MyTest 클래스 자체는 제외) 해당 셀렉터에 응답합니다.

이 문제를 해결하려면 image:didFinishSavingWithError:contextInfo: 메서드를 클래스 메서드로 변경하십시오.

+0

그건 내가 이해하지 못하는 것이 었습니다. 감사! – Farray

2

당신이 (옵션)이 선택을 제공 할 경우 해당 이름을 가진 방법을 구현해야합니다

+ (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo { 
} 

이것은 당신이 클래스 메소드 대신에이 작업을 수행하려고하는 사실에 의해 복잡를 인스턴스 메소드.

이 케이스를 처리해야하는 경우가 아니면 선택기 대신 nil을 전달할 수 있습니다.

+0

문제는 인스턴스 메소드로 구현했지만'self'는 클래스가 아니라 인스턴스입니다. 내가 보여준 것처럼'image : didFinishSavingWithError : contextInfo :'메소드를 클래스 메소드로 만들어 보라. – rmaddy

+0

알았습니다. 감사! – Farray

관련 문제