2013-10-25 79 views
1

所以在這裏的用戶之一設法告訴我如何通過一個字符串將數據從子視圖控制器傳遞給父視圖控制器。UIlabel問題:應用程序關閉後保留字符串值?

所以現在字符串被傳遞了,但是,我希望該值在應用程序關閉並重新打開後保持顯示在firstViewController上。

該值與NSUserDefaults保存在一起,順便說一下,我看到它在conosole上保存在apps文件夾中,但該值不保存到UILabel顯示屏上。

它只顯示它當我把保存,但然後我關閉並重新打開,它消失,但在NsLog它仍然在應用程序內,但不顯示UILabel。

我該如何解決這個問題?

在我appDelegate.h我有一個

@property (strong, nonatomic) NSString *sharedString; 

到secondViewController數據傳遞給firstViewController。

在我secondViewController save方法我有相關的 AppDelegate.h聲明一個函數,它是:

AppDelegate *apiDelegate = [[UIApplication sharedApplication] delegate] 
apiDelegate.sharedString = self.textFieldData.text; 

而在我的firstViewController我有從第二 的viewController顯示數據的方法:

-(void) viewDidAppear:(BOOL)animated { 
    AppDelegate *apiDelegate = [[UIApplication sharedApplication] delegate] 
    self.DisplayData.text = appDelegate.sharedString; 
    [super viewDidAppear: NO]; 

有什麼不對心不是該保持完好數據應用程序關閉後或正在 我失去了一些東西?

+1

爲什麼不從NSUserDefaults中填充它?你在綜合appdelegate中的sharedString嗎? – bizsytes

+1

您可能還想更改[super viewDidAppear:NO]; to [super viewDidAppear:animated]; – bizsytes

+1

我會建議你不要使用應用程序委託在類之間傳遞數據。有更好的方法,如公共財產,代表等更好的編碼實踐。 – Andrew

回答

4

所以在這裏的用戶之一設法告訴我如何通過字符串將數據從 子視圖控制器傳遞給父視圖控制器。

首先,你需要建立一些層次結構,以你如何從parentViewController得到childViewController。將數據從childViewController傳遞到parentViewController的一種方法是使用委託。另一個可能使用KVC/KVO協議。 https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html

在這裏,你可以簡單地註冊一個觀察者來定義在childViewController中的屬性,並觀察它的變化,無論你想要的(以及給定的層次結構是滿意的)。

保存該值。你可以簡單的使用NSUserDefaults來保存它。我沒有看到您的帖子中的任何代碼,但你可以簡單地定義一個密鑰,並使用與保存NSUserDefaults的價值:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
[defaults setObject:sharedString forKey:@"sharedString"]; 
NSString *sharedStringFromDefaults = [defaults objectForKey:@"sharedString"]; 

此外,

的AppDelegate * apiDelegate = [[UIApplication的sharedApplication] 代表]

Apple要求您在應用程序中避免使用此類引用。它只限制應用程序。此外,sharedString不需要位於AppDelegate中。否則,AppDelegate將充滿您在應用中共享的幾乎所有其他數據結構。

1
//add this code when you want to store string 
[[NSUserDefaults standardUserDefaults] setObject:self.textFieldData.text forKey:@"sharedString"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

//and when you want string than 
self.DisplayData.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"sharedString"]; 
+0

代碼如何保存從secondViewControllers輸入數據顯示的firstViewControllers數據?我的意思是我知道它將它保存到應用程序某處的文件夾plist,但我想要的值,例如:即使在關閉應用程序後,125.50仍然可以在位於firstViewController中的UIlabel上可見。初始時它顯示保存的值,但是當我關閉應用程序並重新打開它時,UILabel不再支持它,但它在內部存儲在NSUserDefaults中,只是不在UILabel對象上顯示 – Amit

+0

任何建議? – Amit

+0

我不理解問題所在。如果在應用程序啓動時無法看到UILabel中的任何數據,那麼您可能不會首先在UILabel中設置數據。在firstViewController的viewDidLoad中,嘗試從'NSUserDefaults'中檢索值並將其記錄到控制檯。檢查你是否有數據。 – p0lAris