gpt4 book ai didi

objective-c - NSKeyedArchiver .plist 附加问题

转载 作者:行者123 更新时间:2023-12-03 18:01:13 24 4
gpt4 key购买 nike

**

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

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

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

最佳答案

首先,最后两个方法似乎不相关,因为您没有对这些方法所属的对象进行编码。同样,NSCoding 协议(protocol)包含 encodeWithCoder:initWithCoder: 方法。 NSCoding 协议(protocol)中没有 decodeWithCoder: 方法。

其次,您将创建一个新的 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];

关于objective-c - NSKeyedArchiver .plist 附加问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6242942/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com