我正面临一个NSUsrDefaults的奇怪问题。每当我从NSUserDefaults获取数据时,它就会暂时填充。我将它提取到viewDidLoad中,它被取出。
-(void)viewDidLoad{
companies = [NSMutableArray array];
oldCompanies = [[NSUserDefaults standardUserDefaults] arrayForKey:@"companyData"];
if( companies )
{
for( NSData *data in oldCompanies )
{
companyObj = (Company*) [NSKeyedUnarchiver unarchiveObjectWithData:data];
[companies addObject:companyObj];
}
}
}
但是在viewDidLoad之外,每当我尝试访问数据时,数组“oldCompanies”以及“公司”都显示为“nil”。
编辑: 我将我的Company对象编码在一个类中,该类是NSCoding的子类,如下所示,但不在任何地方分配或保留属性。这可能是抓住了吗?
- (void)encodeWithCoder:(NSCoder *)encoder
{
//Encode properties, other class variables, etc
[encoder encodeObject:self.companyId forKey:@"id"];
[encoder encodeObject:self.companyTitle forKey:@"title"];
[encoder encodeObject:self.companyImage forKey:@"image"];
}
- (id)initWithCoder:(NSCoder *)decoder
{
self = [super init];
if( self != nil )
{
//decode properties, other class vars
self.companyId = [decoder decodeObjectForKey:@"id"];
self.companyTitle = [decoder decodeObjectForKey:@"title"];
self.companyImage = [decoder decodeObjectForKey:@"image"];
}
return self;
}
有人可以帮忙吗?
提前完成。
答案 0 :(得分:1)
+array
会创建一个自动释放的数组 - 如果您想根据memory management rules获取所有权,那么您需要保留它:
[companies retain];
或者创建它以便它不会自动释放:
companies = [[NSMutableArray alloc] init];
或者,更好的是,让declared properties为您做到这一点:
// interface, property declaration:
@property(retain, readwrite) NSMutableArray *companies;
// implementation:
@synthesize companies;
// ... using it:
self.companies = [NSMutableArray array];
答案 1 :(得分:1)
你没有保留数组,当你没有做一个alloc,或者在设置一个对象时保留你得到一个自动释放的对象,在你的示例公司是自动释放的,这就是为什么你以后不能再访问它了要么分配它 [[NSMutableArray alloc] init]或保留它[NSMutableArray array] retain] ...无论哪种方式引用内存管理指南来了解objective-c内存管理memory managment ref
答案 2 :(得分:0)
您是否在加载视图之前尝试访问数据?
Objective-C不会为您重置指针。如果数组不是“持久化”,那么指针将指向垃圾。