2013-04-02 73 views
0

我有一個iOS應用程序,其中有一個視圖控制器,用戶可以在其中訪問其相機或庫來加載圖片。我想創建一個臨時副本,以加載到另一個視圖控制器中的另一個UIImageView。我能夠保存文件(至少看起來如此的的NSLog,但我無法訪問它來填充第二視圖 - 控制如何檢索我保存在臨時位置的圖像

當用戶將圖像加載

第一視圖控制器:

-(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
image = [info objectForKey:UIImagePickerControllerOriginalImage]; 
[userImageView setImage:image]; 
[self dismissViewControllerAnimated:YES completion:NULL]; 

//Save the temp file 
tmpDirURL = [NSURL fileURLWithPath:NSTemporaryDirectory() isDirectory:YES]; 
fileURL = [[tmpDirURL URLByAppendingPathComponent:@"userPic"] URLByAppendingPathExtension:@"jpg"]; 
NSLog(@"fileURL: %@", [fileURL path]); 
} 

我現在的問題是,我怎麼能在第二個視圖控制器的viewdidload中調用保存的文件?

我正在玩這樣的東西,但我得到的錯誤(我只是希望! :

userImageView.image = _fileURL; 

userImageView是我設置爲我的圖像視圖的出口。

在第一控制器

@property (nonatomic, strong) IBOutlet NSURL *fileURL; 
@property (nonatomic, strong) IBOutlet NSURL *tmpDirURL; 
+2

你永遠不保存文件。你創建的URL路徑,但沒有文件的寫... –

回答

0

它試試下面非常簡單的步驟

1.covert所選圖像爲NSData的

2.創建文檔目錄路徑

3.append圖像名稱爲文件路徑

3.使用[data writeToFile:imagePath atomically:YES]; 寫入最後創建的路徑。

4.然後地方或任何你想要你的文件夾

+0

所以你的回答很有幫助,我很感激。我正在努力學習,所以你的名單幫助我做到了。我現在將圖像保存到文檔目錄中(我已經通過進入文件驗證了這一點,我也可以將它作爲圖像打開進度...是的!)現在我的問題是,我不能找到任何關於如何從我的文檔目錄訪問它的內容。這是它的保存方式: – user1504333

+0

data = UIImagePNGRepresentation(userImageView.image); dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES); docsDir = [dirPaths objectAtIndex:0]; databasePath = [[NSString alloc] initWithString:[docsDir stringByAppendingPathComponent:@「userPic.png」]]; [data writeToFile:databasePath atomically:YES]; – user1504333

+0

現在明白了。謝謝! – user1504333

2

你不能只分配一個NSURL作爲圖像屬性的.h文件中聲明。

這將是:

userImageView.image = [UIImage imageWithContentsOfFile:[_fileURL absoluteString]]; 

此外,它看起來並不像你居然保存文件(除非你正在做的其他地方)。爲什麼不只保留一個指向所選圖像的指針並將指針傳遞給另一個視圖控制器?

您已經有了一個指向一個UIImage以上線路

image = [info objectForKey:UIImagePickerControllerOriginalImage];

如果您在第二個視圖控制器中創建UIImage屬性(強),並將其設置爲相同的東西,您仍然應該可以使用它。例如,如果你的第二個視圖控制器是mySecondViewController,並且它有一個屬性叫做theImageINeed,你可以做到以下幾點:

image = [info objectForKey:UIImagePickerControllerOriginalImage]; 
[userImageView setImage:image]; 
mySecondViewController.theImageINeed = image; 

但是,好像你是從你所需要的圖像的一個呈現一個視圖控制器對於。在這種情況下,我會忽略我剛纔所說的,併爲此創建委託方法。

這意味着,在你提出的觀點的頭,你會是這樣的:

//In the header file of the presented view 
@protocol FoundMahImageDelegate <NSObject> 
- (void)userSelectedAnImage:(UIImage *)image; 
@end 

@interface yourViewName : NSObject 

//whatever else you already have 

@property (nonatomic, strong) id <FoundMahImageDelegate> delegate; 
@end 

而在.m文件:

//In the implementation file of the presented view 
image = [info objectForKey:UIImagePickerControllerOriginalImage]; 
[userImageView setImage:image]; 
[self.delegate userSelectedAnImage:image]; //<-- the part that changed 
[self dismissViewControllerAnimated:YES completion:NULL]; 

在你呈現視圖,你現在有在頭文件中添加協議:

@interface myMainViewController : NSObject <FoundMahImageDelegate> 
//... 

並在其實施文件中,添加我們在協議定義中添加的方法:

- (void)userSelectedAnImage:(UIImage *)image 
{ 
    //here you go, you've got the image, do something with it 
} 

希望這有助於您。

+0

我曾試過,但我得到不兼容的指針類型「NSURL NSString」 – user1504333

+0

然後'userImageView.image = [UIImage imageWithContentsOfFile:[_ fileURL absoluteString]]; ' – mbuc91

+0

我更新了上面的答案以匹配。 absoluteString實例方法返回絕對路徑作爲NSString。 – mbuc91

0

不知道訪問圖像,但你可以試試這個

userImageView.image =[UIImage imageWithData:[NSData dataWithContentsOfURL:_fileURL]]; 
相關問題