2

我有一个使用 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

这是怎么回事?GitHub 上的示例代码。

4

2 回答 2

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];
于 2011-01-11T19:09:17.573 回答
0

在第一个示例中,您并没有真正实现 CTCarrier 类,而只是向它添加了一个方法。这些类别提供了一种向已定义的实现添加方法的方法。

于 2010-11-25T11:36:57.970 回答