1

さて、この質問全体を入力してから、なんとか削除しました。はぁ。とにかく、私がどこでも検索し、キーボードに頭をぶつけて、これを理解できないという標準的な開示。

ユーティリティ アプリケーション テンプレート (MainViewController と FlipsideViewController を使用) に基づいて基本的なアプリを構築しています。補足: このスキームでの MainView と FlipsideView の目的をまだ理解していないので、誰かがそれを説明できれば、それほどひどいことにはなりません:D

とにかく、これらのビューの両方の下部にツールバーが必要です。IB を使用して特定のビューにそれを追加するのは簡単でしたが、2 つのビュー間で状態の一貫性を維持したいので、ツールバーに独自のコントローラーとモデルを持たせたいと考えています。したがって、ペン先からそのビューをロードしたいのですが、何か間違っているようです。私はここでアドバイスに従いました: NSViewController と Nib からの複数のサブビューですが、明らかにそれを壊してしまったので、より多くの洞察をいただければ幸いです。

私は次のことを行いました: 基本的に空ですが、ToolBar.xib のファイル所有者である ToolBarViewController を作成しました。ToolBar.xib 内には、ツールバーのサイズのフレームとその中にツールバーがあるビューがあります。MainView.xib には、以下のコードにある toolBarView に接続されている同じサイズのビュー要素があります...

MainViewController.h で:

#import "ToolBarViewController.h"

@interface MainViewController : UIViewController <FlipsideViewControllerDelegate, MKMapViewDelegate> {
 ...
 ToolBarViewController *toolBarViewController;
 IBOutlet UIView *toolBarView;
}

...
@property(nonatomic, retain) ToolBarViewController *toolBarViewController;
@property(nonatomic, retain) IBOutlet UIView *toolBarView;

MainViewController.m で:

@synthesize toolBarViewController;
@synthesize toolBarView;

- (void)loadView
{
    [super loadView];
    toolBarViewController = [[ToolBarViewController alloc] initWithNibName:@"ToolBar" bundle:nil];
    [[toolBarViewController view] setFrame:[toolBarView frame]];
    [[self view] replaceSubview:toolBarView with:[toolBarViewController view]];
}

ビルドして実行すると、上記の最後の行で「UIView」が「replaceSubview:with」に応答しない可能性があるという警告が表示され、実行時に次の例外がスローされます: *** -[MainView replaceSubview:with:]: unrecognizedインスタンス 0x450c540 に送信されたセレクター

誰かが私が間違っていることを説明できますか? ありがとう!

4

2 に答える 2

0

これは、そのような UIView の replaceSubview:with: がないためです (ただし、Mac の NSView にはそのようなメソッドがあります)。

Objective-C の警告は通常エラーであることを忘れないでください ;) 一般に、私はそれらを処理せずに放置することは決してなく、それらをエラーに変えることさえあります: http://akosma.com/2009/07/16/objective-c-compiler-警告/

于 2010-01-08T17:44:49.013 に答える
0

[UIView replaceSubview:with:] というメソッドはありません。それが NSView メソッドです。コンパイル時に、これに関する警告が表示されるはずです。

[[self view] insertSubview:aboveSubview:]同じことを行うには、 andを使用する必要があります[toolbarView removeFromSuperview]

そうは言っても、これがツールバーをいじりたい方法かどうかはわかりません。私はおそらくもっと次のようなものを試してみます:

self.toolbarItems = [toolbarViewController toolbarItems];
于 2010-01-08T17:48:02.050 に答える