2015-10-27 2 views
0

Я сравниваю два класса, используя свойство isKindOfClass, но, похоже, не работает. Я записал результаты, которые кажутся такими же, но я не понимаю, почему они не работают.Сравнение двух классов

UIView *childView = [view subviews][j-1]; 
NSLog(@"childview class: %@", childView.class); 
NSLog(@"childview.class class: %@", [childView.class class]); 
NSLog(@"sfidimmer button class: %@", [SFIDimmerButton class]); 


if([childView.class isKindOfClass:[SFIDimmerButton class]]){ 
    NSLog(@"iskindofclass"); 
    curFrameSize = dimFrameWidth; 
} 

Выход nslogs:

childview class: SFIDimmerButton 

childview.class class: SFIDimmerButton 

sfidimmer button class: SFIDimmerButton 

Контроль не идет внутрь, если Conditon, вы можете, пожалуйста, дайте мне знать, почему?

ответ

4

Не используйте класса делать вроде как ..

if([childView isKindOfClass:[SFIDimmerButton class]]){ 

    // do your stuff here .. 
} 

надеюсь, что это поможет вам.

+1

спасибо, но можете ли вы объяснить, что происходит, когда я использую класс? – Masood

+0

@Masood Это должно помочь вам выяснить причину: http://stackoverflow.com/a/3653947/656600 также посмотрите на ответ лея для более подробной информации. – rptwsthi

1

Ваша проверка неправильная. Вы должны вызвать isKindOfClass: по объекту, а не по классу объекта.

Таким образом, вместо того, чтобы проверить на

if([childView.class isKindOfClass:[SFIDimmerButton class]]){ 
    NSLog(@"iskindofclass"); 
    curFrameSize = dimFrameWidth; 
} 

Попробуйте вместо

if([childView isKindOfClass:[SFIDimmerButton class]]){ 
    NSLog(@"iskindofclass"); 
    curFrameSize = dimFrameWidth; 
} 

Вы также можете использовать isMemberOfClass, но большую часть времени вы хотите использовать isKindOfClass: чтобы убедиться, что ваш код работает с подклассами.

isKindOfClass: возвращает ДА, если получатель является экземпляром указанного класса или экземпляром любого класса, который наследует указанный класс.

isMemberOfClass: возвращает ДА, если приемник является экземпляром указанного класса.

2

Ваша ошибка

Self.class возвращение класса Object, в то время как вы используете isKindOfClass, который используется для проверки экземпляра класса

Вы можете проверить, если объект является экземпляром этого класса, используя isKindOfClass, как указано выше упомянутый ответ ,

Документ

Возвращает логическое значение, указывающее, является ли получатель является экземпляром данного класса или экземпляр любого класса, который наследует от этого класса.

Вы также можете проверить класс с помощью

[childView.class isSubclassOfClass:[SFIDimmerButton class]] 

Возвращает логическое значение, указывающее, принимающий класс является ли подкласс, или идентичны, данный класс.

0

Используйте любой объект с идентификатором id, затем сравните его с типом класса. Если выполнено, то введите cast с классом Target.

id childView = [view subviews][j-1]; 
if ([childView isKindOfClass:[SFIDimmerButton class]]) { 

    SFIDimmerButton *btnDimmer = (SFIDimmerButton *)childView; 
    // perform your action with derived button.. 
} 

Надеюсь, это вам поможет.
Спасибо.

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