textView没有从另一个视图控制器设置(使用Singleton类)

时间:2012-07-09 12:46:53

标签: objective-c ipad ios5 singleton xcode4.3

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


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

2 个答案:

答案 0 :(得分:2)

宣言

首先,在您的app委托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:getSharedString方法 - 我们可以通过引用它来简单地访问和改变对象。这是我们在.m文件中合成它的方式:

//YourAppDelegate.m
@synthesize sharedString;

分配值

如果要从另一个类为sharedString分配值,则必须首先检索应用程序委托的活动实例:

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

此处的appDelegate对象是您正在运行的应用委托代理实例。要访问代理中的sharedString NSString对象并分配值,我们会这样做:

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

在我们的应用程序运行时间内,“我们要分配的某个字符串”现在存储在我们的app委托中的sharedString中。

检索值

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

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

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

NSString *retrievedString = appDelegate.sharedString;

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

注意:

  

无处不在我提到YourAppDelegate,我指的是你的app delegate - 你在项目中拥有的app代理。它将与您的项目名称相关(查找文件)。

答案 1 :(得分:0)

如何定义Text-Variable的NSString属性?它是“弱者”吗?