1

ここにいくつかのコードがあります:

ViewControllerA.h

@interface ViewControllerA: UIViewController {
   NSString *myString;
}

@property (nonatomic,retain)NSString *myString;

ViewControllerA.m

@implementation ViewControllerA
@synthesize myString;

次に、ナビゲーション コントローラーで ViewControllerB をプッシュします。ViewControllerA ViewControllerB.m に戻りたいとき

-(IBAction)randomAction(id)sender {
   ViewControllerA *myViewController = (ViewControllerA*)[self parentViewController]:
   [myViewController setMyString:@"test"]: // HERE IS THE ERROR : "[DMINavigationController setMyString:]:unrecognized selector sent to instance"
   [self.navigationController popToViewController:[[self.navigationController viewControllers] objectAtIndex:0] animated:YES]
}

なんで?ビューコントローラーではなく「[DMINavigationController setMyString:]」というエラーが表示されるのは正常ですか?

4

4 に答える 4

0

ViewControllers と、NavigationController でそれらを適切に処理する方法について少し混乱していると思います。

で開始し、DMINavigationControllerで初期化した可能性がありますViewControllerA。新しい ViewController をプッシュするViewControllerBと、親ではViewControllerAなく、NavigationController になります。

前の ViewController にアクセスする場合viewControllersは、NavigationController のプロパティを照会して検索する必要があります。

探している VC は (現在のオブジェクトのインデックス)-1 にあります

int index = [self.navigationController.viewControllers indexOfObject:self] - 1;
ViewControllerA *vcA = [self.navigationController.viewControllers objectAtIndex:index];
于 2012-09-28T09:42:34.963 に答える
0

代わりに、parentViewControllerあなたが意図したと思いますpresentingViewController。これは iOS5 以降でのみ使用できます。

別の答えを受け入れたようですが、別のアプローチは、ビューコントローラーBがビューコントローラーAへの弱い参照であるプロパティを持つことです。これは、AがBを作成した後、Bに移行する前に設定されます(たとえば、 、prepareForSegueセグエを使用している場合)。

于 2012-09-28T15:27:57.380 に答える
0

によって宣言されたメッセージを送信しようとしてクラッシュしたため、変数はビュー コントローラーの親ビュー コントローラーとして割り当てられました。これは明らかにインスタンスでmyViewはありません。なぜそんなことをしているのですか - 親に対して何を達成しようとしているのですか?ViewAViewA

于 2012-09-28T09:37:37.767 に答える
-1

文字列をビューに設定することはできません。ラベルを作成してから、ラベルにテキストを設定する必要があります。myString のプロパティを作成していないもう 1 つのことを設定する必要があります。

@synthesize myString;

変数のプロパティを記述している場合は、@synthesize のみを追加できます。

于 2012-09-28T09:25:56.820 に答える