2012-05-22 60 views
4

好吧,我的問題是當我使用相機UIImagePicker和手機內存不足。它拋出一個內存警告並卸載該視圖,然後重新加載。如何在存儲器警告後保留值viewDidUnload

我知道這是一個非常普遍的問題,許多問題已經在SO中。我不會進入這個。

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    MyPersonClass *persons = [[MyPersonClass alloc] init]; 
    persons.images = [NSMutableDictionary dictionaryWithCapacity:4]; 
.... 
... 
}  

我的問題是我的視圖控制器有四個按鈕和UIImageViews的,當我點擊每一個,他們打開相機和圖像點擊顯示早在UIImageViews的這些圖像也會被保存在persons.images NSMutable字典。

enter image description here

有時它拋出內存警告流行的錯誤和卸載認爲這樣可以消除所有在的UIImageView這是內存警告之前拍攝的圖像,我失去了一切在persons.iamges我只是希望能夠檢索這些數據。我不知道在哪裏存儲它(我不想使用CoreData此)謝謝 請幫助

+0

這就是爲什麼MVC方法在移動應用程序中運行良好。數據應存儲在模型中(視圖或控制器不是存儲數據的地方)。還有一個骯髒的竅門 - 你可以重寫viewcontroller的'didReceiveMemoryWarning'並將其保留爲空(即:不調用'[super didReceiveMemoryWarning]'但你沒有聽到我的這個消息:)如果內存級別嚴重,你的應用程序可以被終止。 –

+0

它不再在iOS 5中工作。我已經嘗試過,但仍然卸載視圖 – carbonr

+0

感謝您的洞察力 - 現在不是這樣。然後將所有數據保存在單獨的類(對象)中可能是解決方案。 –

回答

1

您可以維護實例變量,當viewDidUnload被稱爲存儲圖像。在viewDidUnload中設置一個標誌,然後存儲Imageviews的所有圖像。並在viewDidLoad檢查標誌,如果viewDidUnload被調用,然後將保存的圖像分配給您的ImageView。

+0

我想到這個,但問題是我的國旗也被重置。請協助 – carbonr

+0

你在哪裏設置標誌?你可以發佈你的代碼 –

+0

只要告訴我在哪裏設置標誌。我在我的實現(.m)文件下設置了一個BOOL標誌。 – carbonr

0

您可以通過這種方式你MutableDictionary保存爲像

[yourMutableDictionary writeToFile:pathToSave atomically:YES]; 

在沙箱中的應用程序的plist然後,讓你的NSMutableDictionary

NSMutableDictionary *containOfPlist = [NSMutableDictionary arrayWithContentsOfFile:pathToYourPlist]; 

希望這是你想要的。

0

請使用NSCache來存儲帶有KeyValue對的圖像。 在內存警告中,將NSCache對象寫入文件並清除低內存警告回調中NScache對象的所有對象。 再次從該文件加載應用程序rad NSCAche。

所以我那種方式可以保存數據,並可以使用它。

另一個備選方案是採取NSDictnaory並通過使用NSArchiver類來存儲它。

相關問題