我有一个使用Core Telephony框架的项目。最近我的代码停止了CTCarrier
类别的工作,链接器抱怨它无法找到CTCarrier
类:
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。
答案 0 :(得分:1)
4.2中有一个错误,它不允许直接创建CTCarrier对象,访问CTCarrier的正确方法是通过CTTelephonyNetworkInfo对象,如下所示:
#import <CoreTelephony/CTTelephonyNetworkInfo.h>
#import <CoreTelephony/CTCarrier.h>
CTTelephonyNetworkInfo *telephony = [[CTTelephonyNetworkInfo alloc] init];
CTCarrier *carrier = telephony.subscriberCellularProvider;
[telephony release];
答案 1 :(得分:0)
在第一个示例中,您实际上并没有实现CTCarrier类,只是添加了一个方法。这些类别提供了一种向已定义的实现添加方法的方法。