1

.xib を使用して UIViewController をインスタンス化する際に問題が発生しています。

私のコードは次のようになります: (実際には、ここを見てください: https://github.com/mrtnbroder/titanium-module-test )

- (void)open:(id)args
{
    ENSURE_UI_THREAD(open, args);

    CustomViewController *viewController = [[CustomViewController alloc] initWithNibName:@"CustomViewController" bundle:nil];

    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];

    [[TiApp app] showModalController:navigationController animated:YES];
}

私の .xib ファイルの名前は CustomViewController.xib です

次のようになります。

TestCamNavigationController.xib

ただし、ビルドすると、アプリは次のようになります。

iPhone シミュレーター

なぜ?どうしたの?

4

4 に答える 4

1

問題は、ペン先がメイン バンドルに含まれていないことです。まず、すべての nib をmodule_folder /assetsのフォルダーにコピーする必要があります。

そのフォルダーの名前を Titanium.bundle のように変更します。

したがって、ディレクトリ構造はmodule_folder /assets/Titanium.bundleのようになります

これにより、コンパイル時に nib がモジュールに確実にコピーされます。

NSBundle で次のようなカテゴリを作成します。

//Shortcut if you want to name the bundle Titanium you'll be ahead of the game
+ (NSBundle *)titaniumBundle
{
    return [NSBundle titaniumBundleWithName:@"Titanium"];
}

//Bundles are put in a folder called modules inside the application's main bundle
+ (NSBundle *)titaniumBundleWithName:(NSString *)bundleName
{
    //Change this to accommodate the module's id
    static NSString *appId = @"com.companyname.module";
    NSString *bundlePath = [NSString stringWithFormat:@"modules/%@/%@.bundle", appId, bundleName];
    bundlePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:bundlePath];

    return [NSBundle bundleWithPath:bundlePath];
}

次に、使用しているファイルにそのカテゴリを含め、これをコード化します。

 CustomViewController *viewController = 
   [[CustomViewController alloc] initWithNibName:@"CustomViewController"
                                          bundle:[NSBundle titaniumBundle]];

次に、少なくとも正しいディレクトリからビューをロードします。

于 2014-12-01T19:22:05.627 に答える
0

あなたはstryboardでやっていますか??

そうでない場合は、didFinishLaunchingWithOptionsメソッドをチェックインしてくださいAppDelegate

self.window.rootViewController = navigationController;
[self.window makeKeyAndVisible];
于 2013-08-15T09:52:14.893 に答える
0

この行:

  CustomViewController *viewController = 
       [[CustomViewController alloc] initWithNibName:@"CustomViewController"
                                              bundle:nil];

xibファイルを「CusomViewController.xib」と呼ぶ必要があることを示唆しています。

アップデート

質問の編集 (およびコメント) により、Appcelerator Titanium のモジュールを開発していることがわかります。

私が収集できることから、Titanium は Xib ファイルまたは viewController を使用しません (代わりに「View Proxies」を使用します)。この回答によると、Titanium で Xib ファイルを使用するのは非常に複雑なプロセスです。

XIB を NIB に変換する必要があります。最も簡単な方法は、XIB をネイティブ プロジェクトに追加し、プロジェクトをコンパイルしてから、NIB を引き出すことです。モジュールのアセットにダンプし、モジュール コードから参照します。... サードパーティから強制されるものがない限り、通常は NIB を使用しないことに注意してください。宣言的にではなく命令的にビューを作成する方が簡単です。

私はチタンではなくネイティブしか知らないので、これ以上お手伝いすることはできません. ただし、Titanium のドキュメントに従うことをお勧めします。ネイティブ iOS 開発と混同しないでください。

于 2013-08-15T10:49:22.053 に答える