Iphone 数组不';无法在viewDidLoad之外持久化

Iphone 数组不';无法在viewDidLoad之外持久化,iphone,nsuserdefaults,Iphone,Nsuserdefaults,我面临着一个奇怪的问题。每当我从NSUserDefaults获取数据时,它都会临时填充。我正在将其提取到viewDidLoad中 -(void)viewDidLoad{ companies = [NSMutableArray array]; oldCompanies = [[NSUserDefaults standardUserDefaults] arrayForKey:@"companyData"]; if( companies ) { for( NSData *data in old

我面临着一个奇怪的问题。每当我从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之外,每当我尝试访问数据时,数组“OldCompanys”以及“Companys”都显示为“nil”

编辑: 我在一个类中对我的公司对象进行编码,该类的子类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;
 }
有人能帮忙吗


Thanx提前。

+array
创建一个自动释放的数组-如果您希望根据获得该数组的所有权,则需要保留该数组:

[companies retain];
或者创建它,使其不会自动删除:

companies = [[NSMutableArray alloc] init];
或者,更好的做法是,让我们为您这样做:

// interface, property declaration:
@property(retain, readwrite) NSMutableArray *companies;

// implementation:
@synthesize companies;

// ... using it:
self.companies = [NSMutableArray array];

你没有保留数组,当你不执行alloc时,或者当你安装一个对象时,你得到一个自动删除的对象,在你的例子中,公司是自动删除的,这就是为什么你以后不能再访问它,你应该或者alloc它
[[NSMutableArray alloc]init]或retain it[NSMutableArray]retain]…无论哪种方式,请参阅《内存管理指南》了解objective-c内存管理

在加载视图之前,您是否尝试访问数据


Objective-C不会为您重置指针。如果数组没有“持久化”,那么指针将指向垃圾。

即使在_companys=[[NSMutableArray alloc]init]之后;[_公司保留];数组在viewDidLoad之外为零。这与NSUserDefaults内存管理有关吗?你不能同时做这两件事,你要么做这两件事,要么做那一件事,无论哪种方式,你都肯定做错事了。即使在保留之后,它也不起作用。这与内存管理有关吗?@neha:“不工作”是什么意思?还是
nil
?空的?应用程序崩溃了吗?你的鼠标发出紫烟了吗?@neha:如果它仍然是
nil
的话,它可能是从未被设置过或者后来被覆盖过。是否检查是否先调用了
-viewDidLoad
,例如通过断点或记录道?你确定没有其他东西会在之后覆盖它吗?@Georg:我正在检查所有的断点,viewDidLoad首先被调用,类中没有一个版本。另外,我正在声明并分配这个类本身的变量。我的NSUserDefault都是用这些值设置的,但是持久化获取的值是我失败的地方。是否有我可以参考的“NSUserDefaults内存管理指南”?