2

アプリを実行していますが、可変配列を取得してオブジェクトを受け入れることができません。ブレークポイントを設定して何が起こっているかを確認しようとしましたが、変更可能な配列が nil であると言い続けています。誰も答えを持っていますか?私のコード:

- (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:] ファイルを開いたり解析したりできない場合、デフォルトで nil を返します。読み込んでいるファイルが存在し、正しくフォーマットされていることを確認してください。

于 2012-09-22T02:02:30.373 に答える
0

ブレークポイントをオンにして確認してみてください

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

ライン。それが不変配列であることを示している場合、つまり更新できないmutableArray場合はカーソルを移動し、それが可変配列であることを示している場合は、この配列を更新できます。あなたの場合、不変の配列を取得しているため、更新できません。したがって、このファイルから可変配列を取得するには2つの方法があります-__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 に答える