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
答案 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]);
}
}