11

NSStringカテゴリクラス( )がありますNSString+URLEncoding.hNSCFConstantStringカテゴリメソッドを呼び出している文字列がiOSによって最適化されているため、不明なセレクターがクラッシュします。

-[__NSCFConstantString URLEncodedString]: unrecognized selector sent to instance 0x290174

iOS 5の最適化と最適化については、http: //www.cocoanetics.com/2012/03/beware-of-nsstring-optimizations/NSCFConstantStringから学びました。NSCFString

NSString/NSCFStringNSStringカテゴリにConstant文字列を含める方法、またはvarを強制的にではなくanにする方法を知っている人はいNSCFConstantStringますか?

乾杯、Z

-編集-

  • リンカーフラグ-ObjC -all_loadは両方ともすでに実装されています
  • NSString + URLEncoding.mは、ターゲットのコンパイルソースに含まれています
  • NSString + URLEncoding.mは、URLEncodedStringメソッドを実装します。
  • ゾンビをチェックしました。

ShareKit2.0に共有サービスを追加しています

ヘッダ:

@interface NSString (OAURLEncodingAdditions)

- (NSString *)URLEncodedString;

実装:

@implementation NSString (OAURLEncodingAdditions)

- (NSString *)URLEncodedString 
{
    NSString *result = (NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
                                                                           (CFStringRef)self,
                                                                           NULL,
                                                                           CFSTR("!*'();:@&=+$,/?%#[]"),
                                                                           kCFStringEncodingUTF8);
    [result autorelease];
    return result;
}
4

3 に答える 3

12

リンカには問題があり、デッド コード ストリッピングによって、obj-c カテゴリのみを含む (または参照されていない) オブジェクト ファイルが完全に除外される可能性があります。理論的には-ObjCフラグをリンカに渡すことでこれを修正できるはずですが、常にうまくいくとは限りません。この問題を回避するには、-all_loadリンカー フラグを指定します。これにより、リンカーは常にすべてのオブジェクト ファイルをリンクします。

-all_loadカテゴリが、どこかに含めているサブプロジェクトまたはライブラリの一部である場合、親プロジェクトで設定する必要がある場合があることに注意してください。

更新:現在-ObjCは信頼性が高く、何年も使用されていると思いますので-all_load、この問題で使用を停止できます.

于 2012-09-10T20:07:15.397 に答える
4

まったく同じ問題を理解するのに 30 分を費やしました。リンカーをいじった後、ターゲットのBuild PhasesのCompile Sourcesリストにカテゴリが存在しないことがわかりました。あることを必ず確認してください。

于 2013-04-23T08:49:54.677 に答える
2

__NSCFConstantStringは のサブクラスなNSStringので、 のカテゴリも にNSString適用され__NSCFConstantStringます。

カテゴリでリンクしていないか、カテゴリでURLEncodedStringメソッドが定義されていません@implementation

于 2012-09-10T20:05:04.253 に答える