0
for (int i = 1; i < [[[UILocalizedIndexedCollation currentCollation] sectionTitles] count]+1; i++) {

    HeaderButton *headerLabel = (HeaderButton *)[tileView viewWithTag:i];
}

大家好,我正在使用 For 循环来遍历我的 XIB 文件中的按钮网格。对于英语本地化,它可以 100% 工作并在网格中找到所有 26 个按钮。

如果您注意到,我正在使用 LocalizedIndex,它将为我返回适当的“小于 NUMBER_HERE”语句。对于日语,它返回 < 38,应该找到所有 37 个按钮。

现在奇怪的问题。日语、西班牙语甚至中文本地化的相同 for 循环将无法正常工作。

我正在失去理智。我插入了 NSLog 语句,它告诉我,它找到标签最多为 27 个的按钮(日语可能有 37 个,西班牙语可能有 30 个等),然后它在 28 处崩溃,告诉我:

-[UIView setTitle:forState:]: unrecognized selector sent to instance 0x1dd6b640

我知道 UIView 没有 setTitle:forState: 方法。我使用上面的 cast 语句来指向特定视图中的 Button Subclass 按钮。就像我说的那样,对于英语,这 100% 有效,但对于其他任何东西,它都不起作用。

没有理由发生这种情况。我的代码是 100% 正确的。Xcode 的 viewWithTag 为 28 似乎有问题。

有任何想法吗?

问候,椰子

4

1 回答 1

2

这里有一些你可以用来调试的代码,以及在你整理好以后保留。对该项目了解不多,看起来 viewWithTag 正在寻找一种您不期望的类型。让我们用一个内省的测试来代替盲目的演员......

for (int i = 1; i < [[[UILocalizedIndexedCollation currentCollation] sectionTitles] count]+1; i++) {

    // let's start out not assuming anything about subviews we find
    UIView *view = [tileView viewWithTag:i];
    if ([view isKindOfClass:[HeaderButton self]]) {
        // now we're sure about what we have
        HeaderButton *headerLabel = (HeaderButton *)view;
        // now we can setTitle:forState: and so on, safely knowing the type
    } else {
        // while we're here, let's find out what was crashing the app
        NSLog(@"look out! view with tag %d is of type %@", i, [view class]);
    }
}
于 2012-11-28T03:43:42.717 回答