EXC_BAD_ACCESS尝试读取NSArray

时间:2009-06-21 14:33:32

标签: objective-c cocoa cocoa-touch nsmutablearray nsuserdefaults

在下面的代码中,我尝试从plist中读取数据:

 -(void)readPreferences 
    {
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        NSMutableArray * myAppDefaults  = [defaults mutableArrayValueForKey:@"LastList"];
        myCustomObject * savedObject;
        NSUInteger i;
        for (i = 0; i < [myAppDefaults  count]; i++) 
        {
            NSArray * thisArray = [myAppDefaults  objectAtIndex:i];

            savedObject.value1 = [thisArray objectAtIndex:0];
            savedObject.value2 = [thisArray objectAtIndex:1];
            savedObject.value3 = [thisArray objectAtIndex:2];
            savedObject.value4 = [myAppDefaults  objectAtIndex:3];

            [objectsArray addObject:savedObject];
        }

    }

不知何故,当我尝试设置“savedObject.value1”时,出现“EXC_BAD_ACCESS”错误。

我意识到这很可能是基本的内存管理,或指针/对象的混乱,但我还在学习。 我希望有人可以帮助我。 最好的祝福 Sjakelien

2 个答案:

答案 0 :(得分:5)

您在设置savedObject属性时尚未初始化value1。您需要添加:

savedObject = [[myCustomObject alloc] init];
for循环之前

,以使其成为可以设置属性的有效对象。

答案 1 :(得分:0)

我在mutableArrayValueForKey中看不到NSUserDefaults。 请改为arrayForKey:,这将为您提供NSArray*

似乎从defaults返回的值是不可变的(当你从文件中获取东西时有意义)。

检查mutableArrayValueForKey的返回值,我怀疑它是零。

第二眼看,你的代码没有多大意义。 在任何时候你都没有分配savedObjects,但是你反复将它插入到数组中。 即使你提取值的方式似乎也不正确。

我建议在Apple文档中查看NSUserDefautls参考,它有基本用法示例。