Ios 对UIView和UIViewController进行编码和编码

Ios 对UIView和UIViewController进行编码和编码,ios,encoding,uiview,decoding,Ios,Encoding,Uiview,Decoding,大家好 我在scrollView中有一些视图。我想将视图保存到文件中,然后在应用程序打开时加载它。所以我有一个密码: -(void) encodeWithCoder:(NSCoder *)_coder{ [_coder encodeObject:self.currentForecast forKey:@"currentForecast"]; [_coder encodeObject:self.weatherForecastView forKey:@"weatherForecast

大家好

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

-(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; 

}
它可以工作,但看起来像是视图的屏幕截图。如何实现这些功能?

如果它有效,那么为什么不简化如下操作(如果使用ARC,请删除
保留
):

但是我不认为它真的有效,因为为
self
使用
initWithCoder
可以防止调用
[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; 
}
-(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; 
}