Почему нереализованные дополнительные методы протокола вызывают ошибки периода выполнения, когда тот метод называют в obj-c?

Благодаря ответу FelipeAls этот код сделал это:

table {
    table-layout: fixed;
    word-wrap: break-word;
}

Еще одна возможность не использовать перенос слов, а иметь что-то вроде ...

http://jsfiddle.net/zzmfA/

10
задан Kevlar 22 June 2009 в 19:18
поделиться

2 ответа

Когда вы вызываете необязательный метод вашего делегата, вам нужно убедиться, что он реагирует на селектор перед вызывая его:

if ([delegate respondsToSelector:@selector(optionalMethod)])
    [delegate optionalMethod];
33
ответ дан 3 December 2019 в 13:27
поделиться

Дополнительные методы протокола просто означают, что объекту, реализующему протокол, не обязательно реализовывать рассматриваемый метод - тогда вызываемый объект обязательно должен проверить, реализует ли объект метод перед вызовом (в противном случае произойдет сбой , как вы заметили). Эти категории NSObject HOM могут быть полезны:

@implementation NSObject (Extensions)

- (id)performSelectorIfResponds:(SEL)aSelector
{
    if ( [self respondsToSelector:aSelector] ) {
        return [self performSelector:aSelector];
    }
    return NULL;
}

- (id)performSelectorIfResponds:(SEL)aSelector withObject:(id)anObject
{
    if ( [self respondsToSelector:aSelector] ) {
        return [self performSelector:aSelector withObject:anObject];
    }
    return NULL;
}

@end

Затем вы можете просто сделать:

[delegate performSelectorIfResponds:@selector(optionalMethod)];
10
ответ дан 3 December 2019 в 13:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: