UI 标签问题:关闭应用后保留字符串值



因此,这里的一位用户设法向我展示了如何通过字符串将数据从子视图控制器传递到父视图控制器。

所以现在字符串被传递了,但是,我希望该值在应用程序关闭并重新打开后保持显示在第一个视图控制器上。

顺便说一下,该值与 NSUserDefaults 一起保存,而我在锥形鞋底上看到的 NSLog 将其保存在 apps 文件夹中,但该值未保存到 UILabel 显示屏上。

仅在我保存时显示它,但随后我关闭并重新打开,它消失了,但在 NsLog 中它仍在应用程序内,但不显示 UILabel。

我该如何解决这个问题?

在我的应用程序代表.h上,我有一个

 @property (strong, nonatomic) NSString *sharedString;

将第二个视图控制器数据传递给第一个视图控制器。

在我的第二个视图控制器上的保存方法中,我有一个与AppDelegate.h 声明,即:

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

在我的第一个视图控制器中,我有一个显示第二个数据的方法视图控制器:

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

是否有问题在应用程序关闭后没有保持数据完整或我我在这里错过了什么?

因此,这里的一位用户设法向我展示了如何从 子视图控制器通过字符串到父视图控制器。

首先,您需要建立一些层次结构,说明如何从父视图控制器获取子视图控制器。将数据从 childViewController 传递到父视图控制器的一种方法是使用委托。另一种可能是使用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 要求您避免在应用程序中引用此类内容。它只会限制应用程序。此外,共享字符串不需要位于应用程序委托中。否则,应用程序代表将填充您在应用程序中共享的几乎所有其他数据结构。

//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"];

最新更新