ネットで色々とサンプルコードを参照させて頂くわけだが、時々そのままではうまく動かない事がある。
あるサンプルでNSDictionary型のデータ(画像情報のプロパティ)をNSMutableDictionary型にキャストしただけで、そのキャスト後の変数に新たなDictionary値を設定しているものがあったが、これを実行するとSIGABORTしてクラッシュする。NSDictionary型のオブジェクトには新たな値を設定するメソッドが実装されていない為だ。まぁ、こう書いてみれば当たり前だが。
というわけで、NSDictionary型のデータを一旦mutableCopyし、NSMutableDictionary型のデータに入れてから新たなDictionary値を設定する事で回避した。 具体的には、画像データにGPS情報を入れ込む際に、下記の様にした。
UIImage *image = info[UIImagePickerControllerOriginalImage];
NSMutableDictionary *metadata = [info[UIImagePickerControllerMediaMetadata] mutableCopy];
// self.latestLocationには現在位置が記録されている想定
metadata[(NSString *)kCGImagePropertyGPSDictionary] = [self GPSDictionaryForLocation:self.latestLocation];
ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];
[assetsLibrary writeImageToSavedPhotosAlbum:image.CGImage metadata:metadata completionBlock:^(NSURL *assetURL, NSError *error) {
if (error) {
NSLog(@"保存失敗: %@", error);
}
}];
赤字の部分のmutableCopyを忘れるとエラーになるので注意
0 件のコメント:
コメントを投稿