2012-12-22 42 views
0

我的應用程序的第一個視圖是一個UITableView。如何防止NSMutableArray丟失數據?

用戶將選擇一個選項,下一個視圖將是另一個UITableView。現在用戶可以點擊一個「添加」按鈕,將其帶到另一個UIViewController,在UITextField中輸入文本。該文本將在保存時出現在先前的UITableViewCell中。

我遇到的問題是:如果我退回到主視圖,然後返回到以前的位置,那麼輸入的文本現在已消失。

如何確保文本沒有被釋放或消失?

+0

您應該在應用程序的某個地方(單一實例或與您的應用程序實例或應用程序委託相關聯的對象)有一個數據模型,它將信息與控制器代碼分開保存...... – nielsbot

回答

1

您可能想要將此數組存儲在項目的其他位置,如在MVC(數據模型)中。你可以爲它創建一個新類,它通過類傳遞信息並將數組存儲在一個地方。然後,一旦添加到數組中,就可以引用該類並調用該類中的方法來將文本存儲在數組中,並且每當您加載表視圖時,它都會將該數組加載到該類中。我會做到這一點,但我會做一切類方法(你不能訪問屬性或Ivars),只是將數組存儲在用戶的默認值/ Web服務或任何你需要的地方,並檢索和添加/刪除數組,返回它是這樣的:因爲數組您將它們保存到用戶的默認

0

原因文本消失後不留可變

+ (NSMutableArray *)arrayOfSavedData { 

    return [[NSUserDefaults standardUserDefaults] objectForKey: @"savedData"]; 
} 

+ (void)addStringToArray: (NSString *)stringFromTextField { 

    [[[[NSUserDefaults standardUserDefaults] objectForKey: @"savedData"] mutableCopy] addObject: stringFromTextField]; 

} 

mutableCopy部分是很重要的,可能是因爲你實例當你回到你所在的位置時,新的控制器。您可以保留對控制器的強有力的參考,並且只有在它不存在的情況下才能實例化。具體如何做到這一點取決於你如何在控制器之間移動 - 無論是在代碼中執行還是使用故事板。

0

這類問題非常頻繁。當你移動多個控制器和視圖時。

每次你加載一個新的視圖和控制器都是alloc + init,新的一組值被分配,並且以前的值不被使用。

您可以使用SharedInstance/SingletonClass,以便分配一次&,並且不會使用新的一組值創建。

相關問題