2

私はコアテレフォニーフレームワークを使用するプロジェクトを持っています。最近、私のコードはCTCarrierカテゴリに動作を停止し、リンカはそれがCTCarrierクラスを見つけることができないことを不平を言う:私場合リンカはそこにあるクラスを見つけることができません

#import <CoreTelephony/CTCarrier.h> 

@interface CTCarrier (Foo) 
- (void) doFoo; 
@end 

@implementation CTCarrier (Foo) 
- (void) doFoo {} 
@end 

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() 
- (void) doFoo; 
@end 

@implementation CTCarrier 
- (void) doFoo {} 
@end 

どうしますか?サンプルコードon GitHub

答えて

0

最初の例では、実際にCTCarrierクラスを実装するのではなく、メソッドを追加するだけです。カテゴリは、既に定義された実装にメソッドを追加する方法を提供します。 CTCarrierオブジェクトを直接作成することはできません4.2のバグがあり

+0

私はカテゴリがで、どのように動作するかを知っています少なくとも私はそう思っています:)問題は、リンカーがカテゴリーを追加するクラスを見つけることができないと不平を言うことです。私がカテゴリの代わりにクラス拡張に切り替えると、リンカは不平を言うのをやめます。それは変だ。 – zoul

+0

クラスは他の.mファイルに実装されていますか?私は '@implementation CTCarrier'を参照しています –

+0

'CTCarrier'クラスはCore Telephonyフレームワークから来ています。 – zoul

1

、CTCarrierにアクセスするための適切な方法は、そのようなCTTelephonyNetworkInfoのオブジェクトを介してである:

#import <CoreTelephony/CTTelephonyNetworkInfo.h> 
#import <CoreTelephony/CTCarrier.h> 

CTTelephonyNetworkInfo *telephony = [[CTTelephonyNetworkInfo alloc] init]; 
CTCarrier *carrier = telephony.subscriberCellularProvider; 
[telephony release]; 
関連する問題