我正在尝试在几个不同的视图控制器之间共享一个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共享状态吗?
答案 0 :(得分:2)
您的内存管理错误,并且您获得了一个完全不同的对象,当您稍后使用getter时,该对象继承了旧数组的地址。
你的@property是正确的,但是你编写了自己的setter和getter,它们没有保留对象。您不需要同时使用@ property / @ synthesize并提供您自己的getter / setter。前者是后者自动化的新方法。
如果你删除了setAuthCookier:和getAuthCookie的实现,那么你的代码应该可以工作。