restorationIdentifier
2017/08/10
初次碰到这这个类, 是在无意中写出来的self.window. restorationIdentifier;
好奇之余, 就深入研究了一番;
我们在把玩手机的时候可能会碰到因为某件事打断了正在跟朋友聊天, 或者正在手机写微博的情况从而被迫按home键将应用放置后台, 可能疏忽时间久了好不容易输入的一大堆文字就那么丢了, 这么一个需求就给我们iOS开发者带来一个新的挑战。
鹅厂在微信开发中采用过这么人性化的设计, so需求很明确了, 回到app的时候继续之前的操作;
那么接下来就是重点了^^
1、需要AppDelegate中实现两个方法:
- (BOOL)application:(UIApplication *)application shouldRestoreApplicationState:(NSCoder *)coder
{
return YES;
}
- (BOOL)application:(UIApplication *)application shouldSaveApplicationState:(NSCoder *)coder
{
return YES;
}
这两个方法从6.0以后才能使用,API还提供了willEncodeRestorableStateWithCoder和didDecodeRestorableStateWithCoder两个方法。
2、需要为支持状态保存的UIViewController设置Restoration ID,如图:
有时候程序中可能未使用xib或者Storyboard,那么需要支持恢复的类中实现一些方法,基本原则如下:
1)类要遵循UIViewControllerRestoration协议;
2)实现viewControllerWithRestorationIdentifierPath方法
3)设置自己的·restorationIdentifier和restorationClass,例如:
self.restorationIdentifier = @"AnyIdentifier";
self.restorationClass = [self class];
3、以上的操作只能保证当程序从后台返回到前台的时候对应的能够恢复到对应的页面,具体subView的状态恢复还需要实现以下方法:
- (void)encodeRestorableStateWithCoder:(NSCoder *)coder
{
//[coder encodeObject:AnyObject forKey:@“AnyKey"];
[super encodeRestorableStateWithCoder:coder];
}
- (void)decodeRestorableStateWithCoder:(NSCoder *)coder
{
//AnyObject = [coder decodeObjectForKey:@“AnyKey"];
[super decodeRestorableStateWithCoder:coder];
}
稍后会附上Demo。
PS:
日积月累, 天天进步;
心有猛虎, 细嗅蔷薇。
--END--