0

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

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

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

- (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)viewDidLoadFirstViewController 中调用加载。在[NSMutableArray new];我的数组之后。UnwindSegue从我的 addViewController返回 grom 时完成保存。

有任何想法吗?

亲切的问候

4

1 回答 1

1

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

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

不确定您要在视图控制器上使用 NSCoding 做什么,但它可能无法满足您的需求。

于 2014-04-28T10:12:53.780 回答