Ios 对UIView和UIViewController进行编码和编码
大家好 我在scrollView中有一些视图。我想将视图保存到文件中,然后在应用程序打开时加载它。所以我有一个密码: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
-(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;
}