私は自分のアプリケーションでよく使う便利なクラスやメソッドを含む独自のフレームワークを開発しています。最近、自分のメソッドを追加するためにNSString "NSString + Extensions.h/m"のクラス拡張を追加しました。例:クラス拡張とフレームワーク
- NSStringの+ Extensions.h
@interface NSString (Extensions) - (NSString *)removeDiacritics; @end
- NSStringの+ Extensions.m
#import "NSString+Extensions.h" @implementation NSString (Extensions) - (NSString *)removeDiacritics { return [[[NSString alloc] initWithData:[self dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES] encoding:NSASCIIStringEncoding] autorelease]; } @end
フレームワークを正常にコンパイルできました。しかし、私は、任意のアプリケーションでこのクラスの拡張の機能のいずれかを使用しようとすると:私は取得
- AppDelegate.m
// CUtils is the name of the framework. CUtils.h contains #import of all header files // contained in my framework #import <CUtils/CUtils.h> @implementation AppDelegate ... - (void)applicationDidBecomeActive:(UIApplication *)application { /* Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previouslyin the background, optionally refresh the user interface. */ NSString *toto = @"Je suis une chaîne avec des caractères spéciaux"; NSLog(@"%@", toto); NSLog(@"%@", [toto removeDiacritics]); }
...
次のエラー:
2012-01-31 17:01:09.921 TestCUtils [4782:207] Je suisの宇根CHAINE AVEC DEScaractèresspéciaux012012-01-31 17:01:09.924 TestCUtils [4782:207] - [__ NSCFConstantString removeDiacritics]:認識されていないセレクタが
しかし、私は私のクラスの拡張機能を追加した場合、直接インスタンス0x340cに送信アプリケーション(フレームワーク外)で、正常に動作します...
何かヒント?
** EDIT **
あなたのいくつかが尋ねてきたように、私は-all_loadおよび「その他のリンカフラグ」で-ObjCオプションを追加しましたが、問題が残っています。
素晴らしい!できます。アプリケーションのターゲットに-ObjCリンカフラグだけを追加しましたが、これは動作しています。私はしかし、質問があります。私のフレームワークでは、SQLiteデータベースを管理するためのクラスを作成しました。したがって、libsqlite3.dylibにリンクする必要があります。私のフレームワークをこの新しいリンカーフラグでアプリケーションに追加すると、libsqlite3.dylibをリンクしていないという事実のためコンパイルエラーが発生しています。十分な)。たぶん私は何かを見逃している... – Niko
これは別の質問としておそらく資格を与えます。一般に、アプリケーション内の依存ライブラリを明示的にリンクする必要があります。カスタムフレームワークをリンクしても依存ライブラリを引き出すのはいいですが、これを行う方法はないと思います。 –