1

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

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

顺便说一句,该值与 NSUserDefaults 一起保存,并且我在控制台上看到的 NSLog 保存在应用程序文件夹中,但该值未保存到 UILabel 显示器上。

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

我该如何解决这个问题?

在我的 appDelegate.hi 上有一个

 @property (strong, nonatomic) NSString *sharedString;

将 secondViewController 数据传递给 firstViewController。

在我的 secondViewController 的保存方法中,我有一个与 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];

应用程序关闭后是否有问题无法保持数据完整,或者我在这里遗漏了什么?

4

2 回答 2

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 将被您在应用程序中共享的几乎所有其他数据结构填充。

于 2013-10-25T03:54:28.430 回答
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"];
于 2013-10-25T04:43:03.953 回答