在'const _strong id'类型的对象上找不到属性'tag'

时间:2013-09-12 04:52:23

标签: ios objective-c

我将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'

类型的对象上找不到属性'tag'

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

3 个答案:

答案 0 :(得分:8)

更改

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

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

问题是编译器不知道id实际上是什么,所以你不能使用。关于它的符号。如果你想跟上id,可以使用((UIView *)id).tag

将其转换为UIView

答案 1 :(得分:6)

在这种情况下,将subview的类型从id更改为UIView *是最佳选择,另一个可行的解决方案是更改:

if (subview.tag == 1)

为:

if ([subview tag] == 1)

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

答案 2 :(得分:4)

id”与编译器的“void *”类似。它没有看到声明的方法或属性,因此您看到了“not found on object”错误。

如果您将“id”循环中的“for”更改为“UIView *”,则可能会有更好的结果。