0

今天是个好日子!

我在滚动视图中有一些视图。我想将该视图保存到文件中,然后在打开应用程序时加载它。所以我有 thias 代码:

-(void) encodeWithCoder:(NSCoder *)_coder{
    [_coder encodeObject:self.currentForecast forKey:@"currentForecast"];
    [_coder encodeObject:self.weatherForecastView forKey:@"weatherForecastView"];
    [_coder encodeObject:self forKey:@"self"];
    [_coder encodeObject:self.view forKey:@"view"];
}

-(id) initWithCoder:(NSCoder *)aDecoder{
    self = [super init];
    if (self) {
        self.currentForecast     = [aDecoder decodeObjectForKey:@"currentForecast"];
        self.weatherForecastView = [aDecoder decodeObjectForKey:@"weatherForecastView"];
        self.view                = [aDecoder decodeObjectForKey:@"view"];
        self                     = [aDecoder decodeObjectForKey:@"self"];
    }
    return self; 

}

它有效,但它看起来像视图的屏幕截图。如何让他们活下去?

4

1 回答 1

0

如果可行,那么为什么不简化如下(retain如果您使用 ARC,请删除):

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

-(instanceType) initWithCoder:(NSCoder *)aDecoder{
    self = [[aDecoder decodeObjectForKey:@"self"] retain];
    return self; 
}

但我不认为它真的有效,因为使用initWithCoderforself可以防止调用[self init]. 或者您可以尝试:

-(instanceType) initWithCoder:(NSCoder *)aDecoder{
    self = [[aDecoder decodeObjectForKey:@"self"] init];
    return self; 
}

但更常见的是不编码self,这意味着:

-(void) encodeWithCoder:(NSCoder *)_coder{
    [_coder encodeObject:self.view forKey:@"view"];
    ...
}

-(instanceType) initWithCoder:(NSCoder *)aDecoder{
    self = [super init];
    if (!self)
        return nil;
    self.view = [aDecoder decodeObjectForKey:@"view"];
    ...
    return self; 
}
于 2014-06-11T08:24:02.227 回答