2

我在文档中读到@property(nonatomic, copy) NSString *restorationIdentifier能够保留UIImageView位置、角度等属性的状态。我尝试添加方法

-(BOOL)application:(UIApplication *)application shouldRestoreApplicationState:(NSCoder *)coder
{
    return YES;
}

-(BOOL)application:(UIApplication *)application shouldSaveApplicationState:(NSCoder *)coder
{
    return YES;
}

到视图控制器。我已经@"myFirstViewController在 IB 中设置了视图控制器的恢复 ID。

我也在视图控制器中添加了以下方法。

-(void)encodeRestorableStateWithCoder:(NSCoder *)coder
{
[coder encodeObject:_myImageView.image forKey:@"UnsavedImage"];
[super decodeRestorableStateWithCoder:coder];
}

-(void)decodeRestorableStateWithCoder:(NSCoder *)coder
{
_myImageView.image = [coder decodeObjectForKey:@"UnsavedImage"];
[super encodeRestorableStateWithCoder:coder];
}

我应该在appDelegate视图控制器或视图控制器中添加前两种方法吗?UIImageView 没有得到保留。这里有什么问题?

4

1 回答 1

1

为了使状态保存和恢复工作,始终需要两个步骤:

  • 应用代表必须选择加入
  • 要保留/恢复的每个视图控制器或视图都必须分配一个恢复标识符。

您还应该为需要保存和恢复状态的视图和视图控制器实现encodeRestorableStateWithCoder:和。decodeRestorableStateWithCoder:

将以下方法添加到UIImageView.

-(void)encodeRestorableStateWithCoder:(NSCoder *)coder
{
    [coder encodeObject:UIImagePNGRepresentation(_imageView.image)
                 forKey:@"YourImageKey"];

    [super decodeRestorableStateWithCoder:coder];
}

-(void)decodeRestorableStateWithCoder:(NSCoder *)coder
{
    _imageView.image = [UIImage imageWithData:[coder decodeObjectForKey:@"YourImageKey"]];

    [super encodeRestorableStateWithCoder:coder];
}

状态保存和恢复是一项可选功能,因此您需要通过实现两种方法让应用程序委托选择加入:

- (BOOL)application:(UIApplication *)application shouldSaveApplicationState:(NSCoder *)coder
{
    return YES;
}

- (BOOL)application:(UIApplication *)application shouldRestoreApplicationState:(NSCoder *)coder
{
    return YES;
}

关于状态保存的有用文章:http: //useyourloaf.com/blog/2013/05/21/state-preservation-and-restoration.html

于 2014-02-18T20:07:49.717 回答