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 

這是怎麼回事?示例代碼on GitHub

回答

0

在第一個例子中,你並沒有真正實現CTCarrier類,只是向它添加一個方法。這些類別提供了一種將方法添加到已定義實現的方法。

+0

我知道類是如何工作的,在至少我希望如此:)問題是,鏈接器抱怨說它無法找到我正在添加類別的類。當我切換到類擴展而不是類別時,鏈接器停止抱怨。這很奇怪。 – zoul 2010-11-25 11:46:23

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]; 
相關問題