2

tag为我的 UILabel 添加了 StoryBoard 属性检查器,并且在我的 ViewController.m 上有以下代码:

for (id subview in [[self view] subviews]) 
{
    if (subview.tag==1) 
    {
        [subview setFont:[UIFont fontWithName:@"Raleway-ExtraLight" size:12]];
    } else if (subview.tag==2) {
        [subview setFont:[UIFont fontWithName:@"Raleway-ExtraLight" size:28]];
    }
}

当我运行我的代码时,我得到了这个错误:

在“const _strong id”类型的对象上找不到属性“标签”

我在这里错过了什么?谢谢你......

4

3 回答 3

8

改变

for (id subview in [[self view] subviews]) {

进入

for (UIView *subview in [[self view] subviews]) { 

问题是编译器不知道 id 实际上是什么,所以你不能使用 . 上的符号。如果您想跟上 id,请使用 ((UIView*)id).tag 将其转换为 UIView

于 2013-09-12T04:55:13.143 回答
6

虽然在这种情况下更改subviewfrom idto的类型UIView *是最佳选择,但另一个可行的解决方案是更改:

if (subview.tag == 1)

到:

if ([subview tag] == 1)

对类型对象进行方法调用id使编译器比尝试访问属性更快乐(尽管它们本质上是相同的)。

于 2013-09-12T05:13:40.147 回答
4

“ ”对编译器id来说就像“ ”。void *它没有看到任何已声明的方法或属性,因此not found on object您会看到“”错误。

如果您将idfor”循环中的“”更改为“ UIView *”,您可能会得到更好的结果。

于 2013-09-12T04:55:54.563 回答