2

我一直在玩 iOS 6 状态保存/恢复,但遇到了一个奇怪的情况。如果我在 Storyboarded 应用程序的导航控制器中嵌入了一个表格视图控制器,表格视图(即使在我向下滚动之后)在我测试状态恢复后将其滚动位置重置为顶部(使用“按下主页按钮,然后停止和在 Xcode 中运行”例程)。这是为 iOS 6.0 构建的 Xcode 4.5.1。

我已经执行了支持恢复所需的步骤:我已经检查了在我的表视图控制器子类中调用了 encodeRestorableStateWithCoder 和 e encodeRestorableStateWithCoder(是的,我在运行该检查时确实调用了 super)。

如果我从情节提要中删除导航控制器,而是将我的表格视图控制器嵌入到选项卡栏控制器中,则滚动位置将保留。

知道我可能做错了什么吗?(我倾向于认为这是一个错误。)

以下是重现此问题的确切步骤(适用于 Xcode 4.5.1、iOS 6.0)

  1. 使用启用了 ARC 的空模板创建一个新的 iPhone 项目。

  2. 创建一个名为 Storyboard 的故事板文件,并在 Project Editor > Targets > Summary 窗格中将其设置为应用程序的“Main Storyboard”

  3. 将导航控制器拖到情节提要场景中

(4)在Appdelegate.m中,将@implementation部分的代码替换为阅读

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    return YES;
}

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

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

(5)创建一个不带XIB的UITableViewController子类,命名为TableViewController,将.m文件中的代码替换为:

#import "TableViewController.h"

@implementation TableViewController

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 1000;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    cell.textLabel.text = [NSString stringWithFormat:@"%d", indexPath.row];
    return cell;
}

(6) 在 Storyboard 中,在实用程序窗格的 Identity Inspector 中,将表视图控制器的类从 UITableViewController 更改为 TableViewController。

(7) 在 Storyboard 中,通过 Attributes Inspector 将单元重用标识符“Cell”分配给表格视图单元。

(8) 在 Storyboard 中,将 Restoration ID 分配给导航控制器、表格视图控制器和 Identity Inspector 中的表格视图。我将 Storyboard ID 分别设置为“Nav Controller”、“Table View Controller”和“Table View”,并选中“Use Storyboard ID”复选框作为每个的恢复 ID。

构建应用程序,向下滚动表格视图,单击主页按钮,在 Xcode 中停止应用程序,然后通过 Xcode 再次运行。

表格视图应该滚动到按下主页按钮之前的位置,但事实并非如此。

4

0 回答 0