scrollToRowAtIndexPath在发布版本中停止滚动但在调试版本中工作

时间:2014-07-22 13:17:03

标签: ios objective-c uitableview

我有一个非常奇怪的案例,我想得到你的意见。在我的应用程序中,我有scrollToRowAtIndexPath,以便在侧索引上使用选项卡时,它会跳转到单元格。直到大约3个月前它一直工作正常,相同的函数调用在所有版本中都不再滚动。我使用相同的XCode版本,相同的代码,但它停止滚动到单元格。我发现如果我在XCode中运行应用程序(即调试版本),滚动就可以了。但是,如果我构建版本,它将不会滚动。这非常令人费解。

我甚至试图重新编译我在三月份发布的完全相同的应用程序代码,旧版本会滚动但是我现在所做的重新编译的代码不会滚动。

有没有人遇到类似的问题,发布版本的行为与调试版本不同。并且在不同的时间(3月份的旧版本,现在的新版本)构建的版本会有不同的表现吗?我原本以为XCode 5.1中可能存在一个错误(但它与我在3月份编译旧版本和昨天重新编译的版本相同)。我更新到XCode 5.1.1,这是同样的问题。

我迷路了,因为这很奇怪〜

以下是三月份和现在没有改变的代码。

// Section Index Array
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView 
{        
    NSMutableArray *charactersForSort = [[NSMutableArray alloc] init];
    for (NSDictionary *item in self.tableViewArray)
    {
        if (![charactersForSort containsObject:[[item valueForKey:@"name"] substringToIndex:1]])
        {
            [charactersForSort addObject:[[item valueForKey:@"name"] substringToIndex:1]];
        }
    }
    return charactersForSort;
}

// Section Index scrolling jump
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index
{
    BOOL found = NO;
    NSInteger b = 0;

    for (NSDictionary *item in self.tableViewArray)
    {
        if ([[[item valueForKey:@"name"] substringToIndex:1] isEqualToString:title])
        {
            if (!found)
            {
                [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:b inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];
                found = YES;
            }
        }
        b++;
    }
}

这个在构建版本中编译的代码在一年前工作了大约一年但之前停止了工作。 在XCode中运行时,此代码始终有效。

修改

我现在知道问题是编译器优化。不知何故,“最快,最小”的优化会导致这种类型的索引滚动不起作用。因为我从未改变过优化设置,所以我仍然不明白它之前的原因。

2 个答案:

答案 0 :(得分:1)

使用 [self.tableView scrollRectToVisible:newRectFrame animated:NO]; 代替 [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:b inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];

答案 1 :(得分:0)

发现问题。我的道歉是我自己的疏忽。

在“sectionForSectionIndexTitle”中,我没有返回任何整数,因为我在表中只有2个部分(第一部分为空,而内容全部在第二部分)。有了优化,我认为它基本上增加了“return 0;”到功能。所以“scrollToRowAtIndexPath”被“return 0;”覆盖导致滚动总是向后滚动到表格的顶部(即第0部分)。由于我不希望“sectionForSectionIndexTitle”实际滚动我的表,我通过“return -1”来解决它现在滚动了。

仍然不知道为什么它在3个月前工作,因为我没有更改任何代码。也许在某些时候我更新到了XCode 5.1(真的不记得了),它有点不同地优化了代码。

谢谢大家的时间。