gpt4 book ai didi

ios - NSKeyedArchiver 不会保存或加载对象

转载 作者:行者123 更新时间:2023-11-29 03:00:39 25 4
gpt4 key购买 nike

所以我有一个包含一些自定义类的数组:

带游戏的 NSMutableArray (FirstViewcontroller)- 骰子游戏 (Game.m)-- 带选项的骰子 (Dices.m)

在每个自定义类中,我都设置了编码和解码:

-(void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:[self _gameNaam] forKey:@"_gameNaam"];
}

-(id)initWithCoder:(NSCoder *)aDecoder{
if (!(self = [super init]))
return nil;
[self set_gameNaam:[aDecoder decodeObjectForKey:@"_gameNaam"]];

return self;
}

在第一个 View Controller 中,我处理加载和保存。但是解码器总是返回没有数组的空值。所以里面什么都没有。这是我的代码:

- (void) saveToFile{
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *bestand = [path stringByAppendingPathComponent:@"data.kets"];

if ([NSKeyedArchiver archiveRootObject:[self dobbelArray] toFile:bestand])
NSLog(@"Did it!!");
}

- (void) loadFromFile{

NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *bestand = [path stringByAppendingPathComponent:@"data.kets"];

if ([[NSFileManager defaultManager] fileExistsAtPath:bestand]){
if ([NSKeyedUnarchiver unarchiveObjectWithFile:bestand])
NSLog(@"Did it!!");
}
}

-(void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:[self dobbelArray] forKey:@"dobbelArray"];
}

-(id)initWithCoder:(NSCoder *)aDecoder{
if (!(self = [super initWithCoder:aDecoder]))
return nil;

[self setDobbelArray:[aDecoder decodeObjectForKey:@"dobbelArray"]];

return self;
}

不确定我做错了什么?在 - (void)viewDidLoad FirstViewController 中调用加载。在我数组的 [NSMutableArray new]; 之后。从我的 addViewController 返回 UnwindSegue 时保存完成。

有什么想法吗?

亲切的问候

最佳答案

unarchiveObjectWithFile: 返回未归档的对象供您使用。目前,您只需检查它是否为 nil(使用您的 if 语句),然后它就会被销毁(因为您不使用它而被释放,假设您使用的是 ARC)。

因此,获取 unarchiveObjectWithFile: 返回的对象并将其设置为您的属性。

不确定您要在 View Controller 上使用 NSCoding 做什么,但它很可能无法满足您的需求。

关于ios - NSKeyedArchiver 不会保存或加载对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23337976/

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