3

xcode で ARC プロジェクトをセットアップしています。そのプロジェクトに非アーク静的ライブラリを追加しました。すべてが機能し、ビルドが見つかります。プロジェクトを実行すると、このエラーが発生します。

キャッチされていない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。

このコードから:

NSString * value = [params objectForKey:key];
[_params setObject:[value encodedURLParameterString] forKey:key];

それはこれを呼び出そうとしている

@implementation NSString (OAURLEncodingAdditions)

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

@end

エラーは、この関数が見つからないと言っているようです。もちろん、それは問題なくコンパイルされ、定義に問題なくジャンプできます。文字列値は、もちろん NSString から継承する定数文字列です。これは、私がプルした他のプロジェクトでうまく機能します。この機能を完全に見つけたので、Xcodeの初心者として、私は頭が痛いです。

このファイルはコンパイル ソースに含まれています。エラーはなく、他のコードを正常にコンパイルおよび実行します。小さな部品が 1 つ欠けているようで、それが何であるかを理解できません。あなたが助けることができるなら、してください。

4

3 に答える 3

4

-ObjCプロジェクトでおよび/または-all_loadリンカー フラグを使用します。参照: -all_load リンカー フラグは何をしますか?

于 2012-09-13T15:33:27.090 に答える
1
// file NSString+URLEncoding.m
#import <Foundation/Foundation.h>
@interface NSString (OAURLEncodingAdditions)
- (NSString *)encodedURLParameterString;
@end

// file NSString+URLEncoding.h - this file is marked with -fno-objc-arc
#import "NSString+URLEncoding.h"
@implementation NSString (OAURLEncodingAdditions)
- (NSString *)encodedURLParameterString {
    NSString *result = (NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
                                                                           (CFStringRef)self,
                                                                           NULL,
                                                                           CFSTR(":/=,!$&'()*+;[]@#?"),
                                                                           kCFStringEncodingUTF8);
    return [result autorelease];
}
@end

上記のコードを考えると、このコードは機能するはずです。

#import "NSString+URLEncoding.h"
// ...
NSString * value = @"xxxxx";
value = [value encodedURLParameterString];
于 2012-09-12T21:21:19.310 に答える
0

セカンダリ プロジェクトでこれを行う方法がわからないため、他のプロジェクトを削除してコンパイラ フラグを追加しました。

http://blog.evanmulawski.com/?p=36

于 2012-09-12T22:30:52.857 に答える