0

我有一个 textViewController 类。我想从另一个视图控制器设置(基本上更新)相应的 textView 内容,我正在推送当前的 textViewController。我认为我可以做到这一点的方法是拥有一个共享的单例类并在那里有一个字符串属性来包含文本。我也一直在使用单例来存储其他一些内容,并且到目前为止它运行良好。


但是单例类中的文本变量不包含我从第二个视图控制器传递给它的内容,因此 textViewController 在弹出第二个视图控制器后,即使在重新出现后也会显示旧文本。我正在其 viewWillAppear 方法中更新 textView,该方法被调用但在 NSLogging 上显示旧文本内容。我在这里想念什么?请提出一个解决方案,现在坚持了很长时间。

4

2 回答 2

2

宣言

首先,NSString在您的应用委托.h文件中声明 。它应该看起来像这样:

//YourAppDelegate.h

#import <UIKit/UIKit.h>

@interface YourAppDelegate : NSObject < UIApplicationDelegate >
{
    NSString *sharedString; //WE ADDED THIS
}

@property (nonatomic, retain) NSString *sharedString; //AND THIS
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet SomeViewController *viewController;

@end

现在您想要合成对象,以便为您创建访问器和修改器方法。这意味着您不必编写setSharedString:andgetSharedString方法 - 我们可以通过引用它来简单地访问和改变对象。这是我们在.m文件中合成它的方式:

//YourAppDelegate.m
@synthesize sharedString;

赋值

当您想sharedString从另一个类中分配一个值时,您必须首先检索您的应用程序委托的活动实例:

YourAppDelegate *appDelegate = (YourAppDelegate*)[[UIApplication sharedApplication] delegate];

这里的appDelegate对象是您正在运行的应用程序委托实例。要访问sharedString NSString委托中的对象并分配一个值,我们会这样做:

appDelegate.sharedString = @"some string we want to assign";

在我们的应用程序运行期间,“我们想要分配的一些字符串”现在存储sharedString在我们的应用程序委托中。

检索值

您需要在某个时候检索该值。为此,我们必须再次获取应用程序委托的运行实例:

YourAppDelegate *appDelegate = (YourAppDelegate*)[[UIApplication sharedApplication] delegate];

一旦我们有了正在运行的实例,我们就可以访问sharedString存储在其中的对象:

NSString *retrievedString = appDelegate.sharedString;

从这一点开始,retrievedString现在保存值“我们要分配的某个字符串”。

笔记:

在我提到的所有地方YourAppDelegate,我指的是您的应用程序委托 - 您在项目中拥有的应用程序委托。它将与您的项目名称相关(查找文件)。

于 2012-07-09T13:11:11.933 回答
0

您的文本变量的 NSString 属性是如何定义的?是“弱”吗?

于 2012-07-09T13:04:50.323 回答