0

**

  1. フォームから配列にデータを取得し、NSKeyedArchiver を使用してその配列を .plist ファイルに書き込もうとしています。
  2. 書き込みは成功しますが、スクリプトを実行するたびに以前のデータに上書きされます。
  3. 上書きする代わりに、新しいデータを .plist ファイルに追加するにはどうすればよいですか?

**

@implementation Player

- (id)init
{
    self = [super init];
    if (self) {
        // Initialization code here.
    }
    return self;
}

- (void)dealloc
{
    [super dealloc];
}

- (IBAction)savePlayer:(id)sender {
    NSString *path = @"/Users/username/fm.plist";
    NSString *pl= [teamPlayer stringValue];
    NSString *name = [namePlayer stringValue];
    NSString *age = [agePlayer stringValue];
    NSString *position= [positionPlayer stringValue];
    Player *player = [[Player alloc] init];

    array = [[NSMutableArray alloc] initWithObjects:pl,
                                  name, age, position, nil];

    [NSKeyedArchiver archiveRootObject:array toFile:path];
    NSString *ns = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
    NSLog(@"test: %@" , ns);
    [array release];
}

—</p>

- (void) encodeWithCoder: (NSCoder *) coder{
    [coder encodeObject:array forKey:@"someArray"];
}

- (void) decodeWithCoder: (NSCoder *) coder{
    [coder decodeObjectForKey:@"someArray"];
    return self;
}
4

1 に答える 1

1

まず第一に、最後の 2 つのメソッドは、それらのメソッドが属するオブジェクトをエンコードしていないため、関連性がないようです。繰り返しになりますが、NSCodingプロトコルにはメソッドが含まれencodeWithCoder:ていinitWithCoder:ます。プロトコルdecodeWithCoder:にメソッドはありません。NSCoding

次に、NSMutableArrayいくつかの要素で初期化された新しいオブジェクトを作成し、それをファイルにアーカイブして、既存のオブジェクトを上書きします。ファイルを解凍して既存の配列を取得し、変更可能なコピーを作成してから、値を追加する必要があります。したがって、コードは次のようになります。

NSArray *existingValues = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
NSArray *newValues = [existingValues copy];
[newValues addObjectsFromArray:[NSArray arrayWithObjects:pl, name, age, position, nil]];
[NSKeyedArchiver archiveRootObject:newValues toFile:path];
[newValues release];
于 2011-06-05T13:18:36.210 に答える