2

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

- (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];

 }
4

3 回答 3

3

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

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

现在, addObject: 调用应该可以工作了。

此致。

于 2012-09-22T05:18:51.727 回答
1

[NSMutableArray initWithContentsOfFile:] returns nil by default if the file can't be opened or parsed. Are you sure the file you're loading exists and is formatted correctly?

于 2012-09-22T02:02:30.373 回答
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将是一个可变数组。你可以更新它。

于 2012-09-22T11:51:24.530 回答