所以我有一个包含一些自定义类的数组:
带游戏的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
时完成保存。
有什么想法吗?
亲切的问候
答案 0 :(得分:1)
unarchiveObjectWithFile:
返回未归档的对象供您使用。目前你只是检查它是否为零(使用你的if
声明)然后它被销毁(因为你没有使用它而取消分配,假设你正在使用ARC)。
因此,获取unarchiveObjectWithFile:
返回的对象并将其设置为您的属性。
不确定您在视图控制器上尝试使用NSCoding做了什么,但它可能无法执行您正在寻找的内容。