无法将对象添加到返回nil的可变数组中

时间:2012-09-22 01:55:00

标签: iphone objective-c xcode nsmutablearray

我正在做一个应用程序而且我无法获得一个可变数组来接受对象。我试过设置断点来看看发生了什么,但它一直说可变数组是零。有没有人有答案? 我的代码:

- (void)save:(id) sender {

    // All the values about the product
    NSString *product = self.productTextField.text;
    NSString *partNumber = self.partNumberTextField.text;
    NSString *price = self.priceTextField.text;
    NSString *quantity = self.quantityTextField.text;
    NSString *weigh = self.weighTextField.text;
    NSString *file = [self filePath];

    //Singleton class object
    Object *newObject = [[Object alloc] init];
    newObject.product = product;
    newObject.partNumber = partNumber;
    newObject.price = price;
    newObject.quantity = quantity;
    newObject.weigh = weigh;

    //Array declaration
    mutableArray = [[NSMutableArray alloc]initWithContentsOfFile: file];
    [mutableArray addObject:newObject];
    [mutableArray writeToFile:file atomically:YES];

 }

3 个答案:

答案 0 :(得分:3)

虽然initWithContentsOfFile:可以在NSMutableArray上调用,但它是从NSArray继承的。返回值是一个不可变的NSArray。如果要将对象添加到可变数组中,则必须执行以下操作:

mutableArray = [[[NSMutableArray alloc] initWithContentsOfFile: file] mutableCopy];
[mutableArray addObject:newObject];
[mutableArray writeToFile:file atomically:YES];

现在,addObject:call应该可以工作。

最好的问候。

答案 1 :(得分:1)

[NSMutableArray initWithContentsOfFile:] returns nil by default if the file can't be opened or parsed。您确定要加载的文件是否存在并且格式正确吗?

答案 2 :(得分:0)

尝试检查

上的断点
mutableArray = [[NSMutableArray alloc]initWithContentsOfFile: file];

线。将光标移到mutableArray上,如果它显示__NSArrayI,则表示它是一个不可变数组,即你无法更新它,如果它显示__NSArrayM,则表示它是一个可变数组,你可以更新这个数组。 在你的情况下,你得到不可变的数组,这就是为什么你不能更新它。 所以你有两种方法从这个文件中获取可变数组 -

方式:1

mutableArray = [[[NSMutableArray alloc] initWithContentsOfFile: file] mutableCopy];

方式:2

NSArray *anyArray = [[NSArray alloc]initWithContentsOfFile: file];
mutableArray = [[NSMutableArray alloc]initWithArray:anyArray];

在这两种情况下mutableArray都是一个可变数组。你可以更新它。