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 に答える