2013-10-02 142 views
1

我截屏,寫他們使用此代碼文件中:從文件加載失敗。

if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) 
    UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, [UIScreen mainScreen].scale); 
else 
    UIGraphicsBeginImageContext(self.view.bounds.size); 

[self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
NSData * data = UIImagePNGRepresentation(image); 

NSArray *directories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [directories objectAtIndex:0]; 
NSString *key = [documentsDirectory stringByAppendingPathComponent:@"screenshots.archive"]; 

NSMutableArray *storageArray = [NSMutableArray arrayWithContentsOfFile:key]; 

if(!storageArray) 
    storageArray = [NSMutableArray arrayWithObject:data]; 
else 
    [storageArray addObject:data]; 

[storageArray writeToFile:key atomically:YES]; 

當我再次加載圖片我這樣做:

pics = [[NSArray alloc] initWithContentsOfFile:[self dataFilePath]]; 

ScreenshotViewController *scv = [[ScreenshotViewController alloc]init]; 

[[self navigationController]pushViewController:scv animated:YES]; 
NSInteger row = indexPath.row; 
[scv setImage:[pics objectAtIndex:row]]; 

dataFilePath方法:

- (NSString *)dataFilePath 
{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    return [documentsDirectory stringByAppendingPathComponent:@"screenshots.archive"]; 
} 

問題是,截圖視圖控制器中的UIImageView保持空白。我測試了各種各樣的東西,它是關於圖像保存/加載到陣列中的方式,但我不確定。我還測試了實際的屏幕截圖部分是通過將其放入UIImageView中並將其添加到視圖中來進行工作的。

注: 如果我改變了

[scv setImage:[pics objectAtIndex:row]]; 

這個

[scv.myUIImageView setImage:[pics objectAtIndex:row]]; 

我得到這個異常:[__NSCFData _isResizable]:無法識別的選擇發送到實例0x847a280。

什麼是設置圖像的正確方法?

哇,它得到技巧凌亂,希望它的可讀性。

回答

1

乍一看,假設你的讀/寫代碼是正確的,你就是用PNG表示保存圖像。 因此,閱讀時,你需要創建一個UIImage這樣的:

UIImage * myPic = [UIImage imageWithData:[pics objectAtIndex:row]]; 

然後嘗試顯示出圖像

+0

這做到了 - 謝謝! – Anders