因此,这里的一位用户设法向我展示了如何通过字符串将数据从 subview Controller 传递到父 View Controller 。
所以现在字符串被传递了,但是,我希望该值在应用程序关闭并重新打开后保持显示在 firstViewController 上。
顺便说一句,该值与 NSUserDefaults 一起保存,并且我在控制台上看到的 NSLog 保存在应用程序文件夹中,但该值未保存到 UILabel 显示器上。
它仅在我保存时显示它,然后我关闭并重新打开,它消失了,但在 NsLog 中它仍然在应用程序内,但不在显示 UILabel 上。
我该如何解决这个问题?
在我的 appDelegate.h 我有一个
@property (strong, nonatomic) NSString *sharedString;
将 secondViewController 数据传递给 firstViewController。
在我的 secondViewController 的保存方法中,我有一个与
AppDelegate.h 声明是:
AppDelegate *apiDelegate = [[UIApplication sharedApplication] delegate]
apiDelegate.sharedString = self.textFieldData.text;
在我的 firstViewController 中,我有一个显示第二个数据的方法
View Controller :
-(void) viewDidAppear:(BOOL)animated {
AppDelegate *apiDelegate = [[UIApplication sharedApplication] delegate]
self.DisplayData.text = appDelegate.sharedString;
[super viewDidAppear: NO];
应用程序关闭后是否有问题无法保持数据完整
我在这里错过了什么?
最佳答案
So one of the users in here managed to show me how to pass data from a child view controller to a parent view controller via a string.
首先,您需要建立一些层次结构,以了解如何从 parentViewController 获取 childViewController。将数据从 childViewController 传递到 parentViewController 的一种方法是使用委托(delegate)。另一个可能是使用 KVC/KVO 协议(protocol)。 https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html
在这种情况下,您可以简单地为 childViewController 中定义的属性注册一个观察者,并在您想要的任何地方观察它的变化(好吧,假设层次结构得到满足)。
保存值(value)。你可以简单地使用 NSUserDefaults 保存它。我在您的帖子中没有看到任何代码,但您可以简单地定义一个键并使用 NSUserDefaults 保存值:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:sharedString forKey:@"sharedString"];
NSString *sharedStringFromDefaults = [defaults objectForKey:@"sharedString"];
还,
AppDelegate *apiDelegate = [[UIApplication sharedApplication] delegate]
Apple 要求您在应用程序中避免此类引用。它只限制应用程序。此外,sharedString 不需要在 AppDelegate 中。否则 AppDelegate 将被您在应用程序中共享的几乎所有其他数据结构填充。
关于ios - UIlabel 问题 : Keep the string value after app is closed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19580737/