У меня есть проект, который использует базовую структуру телефонии. Недавно мой код перестал работать на CTCarrier
категории, компоновщик жалуется, что не может найти CTCarrier
класс:Linker не может найти класс, который должен быть там
Undefined symbols:
"_OBJC_CLASS_$_CTCarrier", referenced from:
l_OBJC_$_CATEGORY_CTCarrier_$_Foo in CTTests.o
ld: symbol(s) not found
Это пример кода, который вызывает ошибку выше:
#import <CoreTelephony/CTCarrier.h>
@interface CTCarrier (Foo)
- (void) doFoo;
@end
@implementation CTCarrier (Foo)
- (void) doFoo {}
@end
Если я изменить категорию на расширение класса, код внезапно строит:
#import <CoreTelephony/CTCarrier.h>
@interface CTCarrier()
- (void) doFoo;
@end
@implementation CTCarrier
- (void) doFoo {}
@end
Что происходит? Пример кода on GitHub.
Я знаю, как категории работы, в как я надеюсь, так :) Проблема заключается в том, что компоновщик жалуется, что не может найти класс, к которому я добавляю категорию. Когда я переключаюсь на расширение класса вместо категории, компоновщик перестает жаловаться. Это странно. – zoul 2010-11-25 11:46:23