iPhone SDK:For loop + ViewWithTag问题

时间:2012-11-28 02:59:54

标签: iphone ios5 ios6

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

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

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

如果您注意到,我正在使用LocalizedIndex,它将为我返回相应的“少于NUMBER_HERE”语句。对于日语,它返回&lt; 38,应找到所有37个按钮。

现在这个奇怪的问题。日语,西班牙语甚至中文本地化的SAME循环将无法正常工作。

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

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

我知道UIView没有setTitle:forState:方法。我正在使用上面的cast语句指向特定视图中的Button子类按钮。就像我说的那样,对于英语来说,这是100%的工作,但对于其他任何事情都没有。

没有理由说这应该发生。我的代码100%正确。它的Xcode似乎与viewWithTag的问题有关。

有什么想法吗?

此致 cocotutch

1 个答案:

答案 0 :(得分: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]);
    }
}