6

スタティック ライブラリ内に xib ファイルまたはその他のビュー コントローラー ファイルを追加しようとしていますが、追加できません。手伝ってくれませんか?

可能であればソースコード全体を追加してください

それらは最初のビューのボタンです。そして、そのボタンをクリックすると、新しいView Controllerが何かを思いつきます(背景色の変化としましょう)。このための静的ライブラリを作成する方法は? 別のプロジェクトで使用できるようにするには?

前もって感謝します

4

3 に答える 3

7

静的ライブラリを構築するときにインターフェイス ビルダーを使用してインターフェイスを構築する場合は、バンドルを作成してライブラリと共に配布する必要があります。

Xcode の場合:

  1. ファイル>新規>ターゲット
  2. OS X フレームワークとライブラリセクションから「バンドル」を選択します
  3. 詳細を入力します。バンドル フレームワークはコア基盤となる必要があります。

次に、フレームワークと同時にバンドルをコンパイルする必要があります。フレームワークの「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 を使用していない場合は) 「他のリンカー フラグ」をプロジェクトに追加することを確認する必要があることに注意してください。

于 2013-07-10T14:02:08.433 に答える
4

厳密に言えば、静的ライブラリに Xib を追加できないのは正しいことです。ただし、回避策があります。Matt Galloway の iOS Library With Resources チュートリアルでは、その方法を説明しています。

リソースを含む iOS ライブラリを参照してください。

于 2013-07-10T14:13:09.920 に答える
0

XIB はリソースのようなもので、スタティック ライブラリとは、ur クラスを含むコンパイル済みファイルです。これは、すぐに使用できるコンパイル済みコードであると言えます。xib をスタティック ライブラリに追加することはできません。

于 2013-07-10T13:33:02.723 に答える