2012-12-08 97 views
1
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editInfo { 
userURL = [editInfo objectForKey:UIImagePickerControllerMediaURL]; 
userImage = image; 
userImageView.image=userImage; 
[self dismissViewControllerAnimated:YES completion:nil];} 

然後我去NSURL userURL,並把它放在一個UIActivityViewController用來上傳圖片。然而,這永遠不會奏效,並且總是像它試圖上傳(空)失敗。然而,包括在Xcode項目,當我使用預設的圖像和下面的代碼,它總是工作,並上傳正確:NSURL返回(空)

NSURL *url = [[NSBundle mainBundle] URLForResource:@"kitten.jpg" withExtension:nil]; 

如果有幫助,我使用https://github.com/goosoftware/GSDropboxActivity

當我使用UIImagePickerControllerReferenceURL代替UIImagePickerControllerMediaURL,我得到以下錯誤: [警告] DropboxSDK:文件不存在(/asset.JPG) 無法上載assets-library://asset/asset.JPG?id = EECAF4D0-A5ED-40E7-8E6F -3A586C0AB06E & EXT = JPG

+0

,有人嗎?請我真的需要幫助... – user1413558

回答

0

從理論上講,UIImagePickerControllerMediaURL中只填入一部電影,而不是圖像。如果您使用UIImagePickerControllerReferenceURL那麼,你給出的網址不是文件系統中的URL,而是資產庫。要從中獲取文件,您需要使用資產庫。使用類似以下內容:

typedef void (^ALAssetsLibraryAssetForURLResultBlock)(ALAsset *asset); 
typedef void (^ALAssetsLibraryAccessFailureBlock)(NSError *error);  

ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset){ 

    ALAssetRepresentation *rep = [myasset defaultRepresentation]; 
    CGImageRef iref = [rep fullResolutionImage]; 

    if (iref){ 

     UIImage *myImage = [UIImage imageWithCGImage:iref scale:[rep scale] orientation:(UIImageOrientation)[rep orientation]]; 

     // Do whatever you now want with your UIImage 
    }  
};  

ALAssetsLibraryAccessFailureBlock failureblock = ^(NSError *myerror){     
    //failed to get image. 
};       

ALAssetsLibrary* assetslibrary = [[ALAssetsLibrary alloc] init]; 
[assetslibrary assetForURL:[filePath objectAtIndex:0] resultBlock:resultblock failureBlock:failureblock]; 

這需要將處理您的請求塊的照顧,但你仍然需要實際要求從資產庫中的資源。對於這一點,試試這個:

ALAssetsLibrary* assetslibrary = [[[ALAssetsLibrary alloc] init] autorelease]; 
NSURL myAssetUrl = [NSURL URLWithString:[editInfo objectForKey:UIImagePickerControllerMediaURL]]; 
[assetslibrary assetForURL:myAssetUrl resultBlock:resultblock failureBlock:failureblock]; 

而且從理論上講,你應該得到你以後:) 該代碼,這是由Ramshad給出的進一步的討論可以發現here

希望這會幫助你解決你的問題。很抱歉,如果這是一個有點太晚了:(

編輯

請注意,如果你不使用ARC,你需要整理在這個例子中,記憶,因爲我還沒有包括的任何記憶管理可言。