3

これは非常に基本的なことかもしれませんが、私は多くのグーグルを行ってきましたが、何が問題なのかわかりません。iOS アプリのサンドボックス データ フォルダから「カメラ ロール」に画像を移動しようとしています。

を使用するUIImageWriteToSavedPhotosAlbum(img,nil,nil,nil)と、エラーは発生しませんが、写真に画像のコピーが保存されません。

なぜ失敗したのかを理解するために、セレクター (以下) を実装しようとしましたが、「MyTest<...> はセレクターに応答しません image:didFinishSavingWithError:contextInfo:」という理由で NSInvalidArgumentException をスローします。

これが私の実装です:

@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

これはおそらく非常に基本的なことだと思いますが、答えを見つけることができませんでした。

4

2 に答える 2

2

そのセレクター (オプション) を提供する場合は、その名前のメソッドを実装する必要があります。

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

これは、インスタンス メソッドではなくクラス メソッドで実行しようとしているという事実によって複雑になります。

このケースを本当に処理する必要がない限りnil、セレクターの代わりに渡すことができます。

于 2012-11-01T22:46:25.630 に答える
2

+moveToCameraRoll:はクラス (つまり、静的) メソッドであるため、関数内の参照selfはクラスUIImageWriteToSavedPhotosAlbumを指していMyTestます。使用しようとしているセレクターはインスタンス メソッドであるため、クラス自体ではMyTestなく、のインスタンスのみがそのセレクターに応答します。MyTest

これを修正するには、image:didFinishSavingWithError:contextInfo:メソッドをクラス メソッドに変更します。

于 2012-11-01T22:47:31.277 に答える