如何使用AppDelegate对象在viewControllers之间共享状态

时间:2010-12-24 17:42:28

标签: iphone objective-c

我正在尝试在几个不同的视图控制器之间共享一个NSArray对象,我首先想到的是在app delegate上添加一个属性,因为他们都可以访问这个对象。

但经过一些调试后,我似乎无法真正分享这个数组。当我从第一个视图控制器和NSLog设置对象时,结果一切正常。但是当我尝试使用另一个视图控制器对象获取该数组值时,它总是返回UITouchData(而不是我的第一个视图控制器设置值后先前在日志中显示的值)

以下是我用来设置值

的代码
NSArray* cookies = [NSHTTPCookie 
                    cookiesWithResponseHeaderFields:[response allHeaderFields] 
                    forURL:[NSURL URLWithString:@""]];

  [appDelegate setAuthCookie:cookies];

以下是我的应用代表的.h的一部分

@interface SomeAppDelegate : NSObject <UIApplicationDelegate> {
  NSArray* authCookie;
}

@property (retain) NSArray* authCookie;

- (void)setAuthCookie:(NSArray *)cookie;
- (NSArray *)getAuthCookie;

@end

这是有问题的方法的.m

@synthesize authCookie;

- (void)setAuthCookie:(NSArray *)cookie
{
  authCookie = cookie;  
}

- (NSArray *)getAuthCookie
{
  return authCookie;
}

这是尝试在第二个视图控制器中获取该数组失败(技术上它在这一行没有失败,但我没有按预期得到NSArray,所以当我尝试使用它失败时)< / p>

NSArray* cookies = [appDelegate getAuthCookie];

我可以像这样使用app delegate共享状态吗?

1 个答案:

答案 0 :(得分:2)

您的内存管理错误,并且您获得了一个完全不同的对象,当您稍后使用getter时,该对象继承了旧数组的地址。

你的@property是正确的,但是你编写了自己的setter和getter,它们没有保留对象。您不需要同时使用@ property / @ synthesize并提供您自己的getter / setter。前者是后者自动化的新方法。

如果你删除了setAuthCookier:和getAuthCookie的实现,那么你的代码应该可以工作。