私はUIImagePickerControllerを使用して、ユーザーが画像ライブラリから画像を選択できるようにしています。私はその後、sqliteデータベースでそのファイルの場所を開始したいので、後で参照することができます。UIImagePickerControllerReferenceURLからUIImageをロードする
私はこれを行う方法についていくつかの検索を行ってきましたが、私はかなり短くなっています。
NSURL *picURL = [info objectForKey:@"UIImagePickerControllerReferenceURL"]
はこれが私に有効なNSURLオブジェクトを与えず、I出力picURL.absoluteString場合、私はに有効なURLのように見えることができるもの:私は、私は、デリゲートメソッド内で呼び出すことで、アイテムのReferenceURLを得ることができます知っていますassets-libraryファイルの場所。しかし、このURLを持つNSDataオブジェクトを作成しようとすると、UIImageを作成することができますが、NSDataはnilを返すためコードが失敗します。たとえば:
NSURL *picURL = [info objectForKey:@"UIImagePickerControllerReferenceURL"]
NSString *stringUrl = picURL.absoluteString;
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:stringUrl]];
imgMain.image = [UIImage imageWithData:data]
私はここにやや反復されていますが、ポイントは、私はsqliteの中に格納できるURLの文字列表現をつかむことで、その後の使用は、画像を作成するために、文字列、後で言った(そう実感します上記のコードはその思考の列を表す)。
ALAssetsLibraryを使用することについていくつかの情報が浮かんでいましたが、iOS 5とARCでうまく動作しないように見えるため、あらゆる種類のフィット感がありました。私はエラーメッセージを受信し続ける '受信者の種類ALAssetインスタンスメッセージは前方宣言です。 ALAsset/ALAssetsLibraryを参照してビルドエラーを停止するARCを無視するファイルのプロパティを設定できますが、コードブロックを終了するとすぐにデータが消えます。以下を参照してください:
NSURL *referenceURL = [info objectForKey:UIImagePickerControllerReferenceURL];
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
__block UIImage *returnValue = nil;
[library assetForURL:referenceURL resultBlock:^(ALAsset *asset) {
returnValue = [UIImage imageWithCGImage:[[asset defaultRepresentation] fullResolutionImage]];
} failureBlock:^(NSError *error) {
// error handling
}];
[library release];
のreturnValueが有効なイメージを返すんが、すぐにコードがデータの内容がなくなっているresultBlockを出るとき(すなわちのreturnValueが再びゼロになります)。
私の質問は:私はUIImagePickerControllerReferenceURLを使用して、それをsqliteに格納して、後で有効なUIImageオブジェクトを作成するために使用できる文字列に変換しますか?
どこにいらっしゃいましたか? –