0

画像をドキュメント ディレクトリに保存する方法があります。次のようになります。

+(void)saveImageInDocumentsDirectory:(UIImage *)image withImageName:(NSString *)name { 
    NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString * basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
    NSData * binaryImageData = UIImagePNGRepresentation(image);
    [binaryImageData writeToFile:[basePath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png",name]] atomically:YES];  
}

画像が保存されたときに実行される完了ブロックをこれに追加する方法はありますか?

4

2 に答える 2

2

完了ブロックはないと思います。ドキュメントによると、戻り値は次を示します

戻り値 操作が成功した場合は YES、それ以外の場合は NO。

私にとってこれは、メソッドが完了するまで、メソッドが呼び出されたスレッドをブロックすることを意味します。保存に時間がかかる場合は、Grand Central Dispatch を使用して別のスレッドで操作を実行できます。メソッドが返されたときに完了ブロックとして使用されるメソッドを呼び出すことができます。探せdispatch_asyncばたくさん見つかるはずです。

ここSOにもたくさんの例があります。例: ブロック、完了ハンドラー、dispatch_async と dispatch_sync の処理

お役に立てれば!

于 2013-02-10T14:03:15.093 に答える
1

完了ブロックを表す追加パラメーターをメソッドに追加できます。しかし、ポイントはありません。ここに含まれるコードはどれも非同期ではありません。このsaveImageInDocumentsDirectory:withImageName:メソッドを呼び出すと、メソッドが返されるときに書き込みが既に完了しています。したがって、完了ブロックのサポートを追加しても、何も得られません。

したがって、完了ブロックのサポートを追加して次のような呼び出しを行う代わりに:

[Whatever saveImageInDocumentsDirectory:someImage withImageName:@"SomeName" completion:^{
    // some completion code
}];

これを行うだけです:

[Whatever saveImageInDocumentsDirectory:someImage withImageName:@"SomeName"];
// some completion code here
于 2013-02-10T18:11:19.033 に答える