我正在使用UIImagePickerController來允許用戶從圖像庫中選擇圖像。然後我想在sqlite數據庫中啓動該文件的位置,以便稍後參考它。從UIImagePickerControllerReferenceURL加載UIImage
我一直在做一些關於如何做到這一點的谷歌搜索,我來了很短。我知道我可以通過委託方法調用裏面獲得該項目的ReferenceURL:
NSURL *picURL = [info objectForKey:@"UIImagePickerControllerReferenceURL"]
這確實給我一個有效的NSURL對象,如果我輸出picURL.absoluteString我這似乎是一個有效的URL到資產庫文件的位置。然而,如果我嘗試用這個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對象?
你有沒有得到任何東西? –