【发布时间】:2023-03-13 21:14:01
【问题描述】:
我有 2 个视图控制器,其中一个有一个字符串(例如“Text1 Text2”),当按下按钮时会将其保存到默认用户数据:
[[NSUserDefaults standardUserDefaults] setObject:textObject forKey:@"textObjectKey"];
同样的按钮在第二个视图控制器上有一个弹出框表示 segue,它在其viewDidLoad 中检索字符串:
[[NSUserDefaults standardUserDefaults] stringForKey:@"textObjectKey"];
并调用setText 方法到textView 以包含字符串。
这确实有效,但我的问题是当我更改字符串(例如“Text1 Text2 Text3”)并单击按钮时,textView 不会显示下一个文本,直到我再次按下它。不仅如此,如果我在第一次按下按钮时再次运行该项目,它将显示我上次运行程序时的文本(直到我再次单击它)。
我可以解决这个“延迟”问题吗?或者它是 iOS 的一个错误(我认为这只是因为它保留了以前程序执行的信息)。
修正编辑:菜鸟错误。我把将字符串存储在用户数据中的语句放在带有 segue 的按钮方法中。
【问题讨论】:
-
您正在将数据保存到持久存储 (NSUserDefaults) 并且想知道为什么它会在下次执行程序时显示该数据?
-
那好吧。对不起,我有点菜鸟
-
而你的“延迟”的原因仅仅是你设置数据的代码是在加载它的代码之后调用的(尝试设置断点)。
-
除非您重置模拟器/设备,否则您保存在适当的应用程序目录或
NSUserDefaults中的任何内容都将在应用程序的运行和重建中持续存在。你能从项目中发布相关的 ViewController 代码吗? -
这是来自视图控制器的代码,它从用户数据中加载字符串: NSString *textString; - (void)viewDidLoad { [super viewDidLoad]; textString = [[NSUserDefaults standardUserDefaults] stringForKey:@"textString"]; _textView.text = textString; // 加载视图后做任何额外的设置。 } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // 处理所有可以重新创建的资源。 }
标签: ios objective-c viewcontroller settext