2012-11-01 64 views
3

這可能是非常基本的,但我做了很多谷歌搜索,似乎無法弄清楚什麼是錯的。我正在嘗試將圖像從iOS應用的沙盒數據文件夾移動到「相機膠捲」。對象不響應選擇器

如果我使用UIImageWriteToSavedPhotosAlbum(img,nil,nil,nil),它不會引發錯誤,但也不會在照片中保存圖像的副本。

爲了找出它失敗的原因,我試圖實現一個選擇器(下面),但是現在它拋出一個NSInvalidArgumentException,原因是「MyTest < ...>不響應選擇器圖像: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'是類,而不是實例。嘗試使像'didFinishSavingWithError:contextInfo:'方法像我展示的類方法。 – rmaddy

+0

明白了。謝謝! – Farray