2013-09-12 3 views
2

я поставил tag на StoryBoard инспектора атрибутов для моего UILabel и у меня есть этот код на мой ViewController.m:свойство «тег» не найден на объект типа «_strong ид постройки»

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]]; 
    } 
} 

, когда я бегу мой код, который я получил эту ошибку:

Свойство «тег» не найден на объект типа «_strong ид постройки»

, что я пропустил здесь? спасибо ......

ответ

8

Изменить

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

в

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

Проблема в том, что компилятор не имеет понятия, что идентификатор на самом деле, так что вы не можете использовать. обозначение на нем. Если вы хотите идти в ногу с идентификатором, переведите его в UIView, используя ((UIView *) id) .tag

4

«id» походит на «void *» на компилятор. Никаких объявленных методов или свойств, которые он видит, следовательно, ошибка «not found on object», которую вы видите.

Если вы изменили этот параметр "id" в своем цикле "for" на "UIView *", у вас могут быть лучшие результаты.

6

При изменении типа subview от id к UIView * является лучшим вариантом в этом случае, еще жизнеспособным решением было бы изменить:

if (subview.tag == 1) 

к:

if ([subview tag] == 1) 

Посылка вызова метода на объект типа id делает компилятор намного счастливее, чем пытаться получить доступ к свойству (несмотря на то, что он по сути является одним и тем же).

Смежные вопросы