スタティック ライブラリ内に xib ファイルまたはその他のビュー コントローラー ファイルを追加しようとしていますが、追加できません。手伝ってくれませんか?
可能であればソースコード全体を追加してください
それらは最初のビューのボタンです。そして、そのボタンをクリックすると、新しいView Controllerが何かを思いつきます(背景色の変化としましょう)。このための静的ライブラリを作成する方法は? 別のプロジェクトで使用できるようにするには?
前もって感謝します
スタティック ライブラリ内に xib ファイルまたはその他のビュー コントローラー ファイルを追加しようとしていますが、追加できません。手伝ってくれませんか?
可能であればソースコード全体を追加してください
それらは最初のビューのボタンです。そして、そのボタンをクリックすると、新しいView Controllerが何かを思いつきます(背景色の変化としましょう)。このための静的ライブラリを作成する方法は? 別のプロジェクトで使用できるようにするには?
前もって感謝します
静的ライブラリを構築するときにインターフェイス ビルダーを使用してインターフェイスを構築する場合は、バンドルを作成してライブラリと共に配布する必要があります。
Xcode の場合:
次に、フレームワークと同時にバンドルをコンパイルする必要があります。フレームワークの「Target Dependencies」ビルド フェーズにバンドルを追加します。
xib を作成するときは、作成した新しいバンドルをターゲットにします。
次に、派生データ ディレクトリでフレームワークをコンパイルすると、フレームワーク バイナリの隣にコンパイル済みのバンドルが表示されます。これをフレームワーク バイナリと共にサード パーティに渡します。
では、コードでこのバンドルをどのように参照しますか? iOS バンドルではロードできず、バンドルは実際にはサード パーティの iOS アプリケーション メイン バンドル内にあります。コードからバンドルに簡単にアクセスできるように、NSBundle にカテゴリを作成できます。
@interface NSBundle (mybundle)
+(NSBundle *)myBundle;
@end
@implementation NSBundle (mybundle)
static NSBundle * _myBundle;
+(NSBundle *)myBundle{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSBundle * mainBundle = [NSBundle mainBundle];
NSString * pathToMyBundle = [mainBundle pathForResource:@"myBundle" ofType:@"bundle"];
NSAssert(pathToMyBundle, @"bundle not found", nil);
_myBundle = [NSBundle bundleWithPath:pathToMyBundle];
});
return _myBundle;
}
次に、コードでバンドルにアクセスして、次のように xib をロードできます。
UIViewController * controller = [[UIViewController alloc] initWithNibName:nil bundle:[NSBundle myBundle]];
フレームワーク コードでカテゴリを使用する場合は、フレームワーク コンシューマーが-ObjC
(または-all_load
最近の Xcode を使用していない場合は) 「他のリンカー フラグ」をプロジェクトに追加することを確認する必要があることに注意してください。
厳密に言えば、静的ライブラリに Xib を追加できないのは正しいことです。ただし、回避策があります。Matt Galloway の iOS Library With Resources チュートリアルでは、その方法を説明しています。
リソースを含む iOS ライブラリを参照してください。
XIB はリソースのようなもので、スタティック ライブラリとは、ur クラスを含むコンパイル済みファイルです。これは、すぐに使用できるコンパイル済みコードであると言えます。xib をスタティック ライブラリに追加することはできません。