3

「MyLibrary.framework」と一緒に出荷するために、すべての .xib リソースを「ViewController.bundle」にバンドルしようとしています。すべての .xib ファイルをフレームワーク プロジェクトに配置すると、すべて正常に動作しますが、それらを「ViewController.bundle」内に配置すると、すべてがバラバラになります。

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', 
reason: 'Could not load NIB in bundle: 
'NSBundle </Users/administrator/Library/Application Support/iPhone Simulator/5.0/
Applications/8AD68FD1-158E-4926-AE03-8FEF870E7012/ios.app/ViewController.bundle> 
(not yet loaded)' with name 'FirstViewController_iPhone''
*** First throw call stack:
(0x160e052 0x1071d0a 0x15b6a78 0x15b69e9 0x3ff838 0x2a6e2c 0x2a73a9 0x2a75cb 0x2c2b89 0x2c29bd  
0x2c0f8a 0x2c0d7e 0x2c0a22 0x2bfd88 0x5e3ac 0x2df8 0x2e34 0x160fec9 0x1e45c2 0x1e455a 0x289b76 
0x28a03f 0x2892fe 0x209a30 0x209c56 0x1f0384 0x1e3aa9 0x1eedfa9 0x15e21c5 0x1547022 0x154590a    
0x1544db4 0x1544ccb 0x1eec879 0x1eec93e 0x1e1a9b 0x2452 0x2385)

私はさまざまな方法を試しました:1.Finderで「ViewController.bundle」を作成し、そこにすべての.xibを配置し、xcodeにドラッグします2.フレームワークプロジェクトの新しいターゲットを作成し、「Framework & Library」の下の「Bundle」を選択します「OS X」セクション(注:「フレームワークとライブラリ」の下に「バンドル」がないxcode 4.6を使用しているため、OSXである必要があります-以前はあり、.pngを含むバンドルを作成していましたこのウィザードを使用するリソース)

どちらの状況でも、ターゲットアプリの「ビルドフェーズ」>>「バンドルリソースのコピー」に「ViewController.bundle」が存在することを確認しました。フレームワークプロジェクトの「ターゲット依存関係」の下に「ViewController.bundle」を含めてみましたが、すべての努力で同じクラッシュが発生しました。

また、さまざまな方法で.xibをロードしようとしましたが、役に立ちませんでした。ただし、同じ「ViewController.bundle」から .png リソースをロードする次のコードは完全に機能します。

// Loading .png resource works perfectly
//  UIImage* closeImage = [UIImage imageNamed:@"ViewController.bundle/first.png"];
//  NSString *szBundlePath = [[NSBundle mainBundle] pathForResource:@"ViewController" ofType:@"Bundle"];
//  UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"showView" message:szBundlePath delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil];
//  UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(220, 10, 40, 40)];
//  [imageView setImage:closeImage];
//  [alertView addSubview:imageView];
//  [alertView show];
//  return;

同じコードを使用して xib をロードできませんでした:

NSBundle *bViewController = [NSBundle bundleWithURL:[[NSBundle mainBundle] URLForResource:@"ViewController" withExtension:@"bundle"]];
if ( [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone ) {
    self.m_pFirstViewController = [[[FirstViewController alloc] initWithNibName:@"FirstViewController_iPhone" bundle:bViewController] autorelease];
    self.m_pSecondViewController = [[[SecondViewController alloc] initWithNibName:@"SecondViewController_iPhone" bundle:bViewController] autorelease];
} else {
    self.m_pFirstViewController = [[[FirstViewController alloc] initWithNibName:@"ViewController.bundle/FirstViewController_iPad" bundle:nil] autorelease];
    self.m_pSecondViewController = [[[SecondViewController alloc] initWithNibName:@"ViewController.bundle/SecondViewController_iPad" bundle:nil] autorelease];
}

    /** It crash in this line!! Note however, both m_pFirstViewController and m_pSecondViewController is allocated and not nil */
self.viewControllers = @[self.m_pFirstViewController, self.m_pSecondViewController];

    /** never reach here already crash */
[[[[UIApplication sharedApplication] keyWindow] rootViewController] presentViewController:self animated:YES completion:^{
    NSLog( @"presented!" );
}];

私は過去8時間をかけてこれをデバッグし、グーグルで検索し、SOからのさまざまな提案を試みましたが、役に立ちませんでした...どんな助けも大歓迎です! ありがとう!

4

1 に答える 1

3

私が試した2番目の方法は最も近い方法です...次に、ビルド設定でOSXバンドルをiOSバンドルに変更します。どうやら、私が逃したいくつかのステップがあります。MattGallowayによるチュートリアルとサンプルプロジェクトをここでフォローしました。

http://www.galloway.me.uk/tutorials/ios-library-with-resources/

そして今、すべてが意図したとおりに機能します。

皆さんの助けに感謝します!

于 2013-03-21T03:01:32.180 に答える