NSKeyedArchiver不会保存或加载对象

时间:2014-04-28 09:56:35

标签: ios objective-c nskeyedarchiver nscoding nskeyedunarchiver

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

带游戏的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;
}

在第一个视图控制器中,我正在处理加载和保存。但是解码器总是返回没有数组的null。所以里面什么都没有。这是我的代码:

- (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返回grom UnwindSegue时完成保存。

有什么想法吗?

亲切的问候

1 个答案:

答案 0 :(得分:1)

unarchiveObjectWithFile:返回未归档的对象供您使用。目前你只是检查它是否为零(使用你的if声明)然后它被销毁(因为你没有使用它而取消分配,假设你正在使用ARC)。

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

不确定您在视图控制器上尝试使用NSCoding做了什么,但它可能无法执行您正在寻找的内容。