0

私はUITabBarを使用して2つのviewControllerを表示しています。firstViewControllerはuiviewで、secondViewControllerはテーブルビューです。2番目のビューテーブルセルをクリックしたときに必要なものは、firstViewControllerのUILabelで値を更新する必要があります。私のコードはここにありますsecondviewcontroller.h

 @interface firstviewcontroller {
 NSMutableArray *stationnamestobepassed;
  }
 @property (nonatomic, retain) NSMutableArray *stationnamestobepassed;
 @end

これsecondviewcontroller.mを宣言する

@implementation firstviewcontroller
@synthesize stationnamestobepassed;

 -(void) someaction{
  stationnamestobepassed = [NSMutableArray     
    arrayWithObjects:@"string1",@"string2",@"string3"];
  secondviewcontroller = [[secondviewcontroller alloc]initWithNibName:@"NIbName" 
Bundle:nil];
  secondviewcontroller.stationnamespassed = self.stationnamestobepassed;
  //i am not pushing the view controller.

 }

@end

これfirstviewcontroller.hを宣言する

@interface secondviewcontroller {
 NSMutableArray *stationnamespassed;
}
@property (nonatomic, retain) NSMutableArray *stationnamespassed;


@end

これfirstviewcontroller.mを宣言する

@implementation secondviewcontroller
@synthesize stationnamespassed;

  -(void)viewWillAppear:(BOOL)animated
   {
  //stationNameDisplay is a uilabel

stationNameDisplay.text=[stationnamespassed objectAtIndex:0];
NSLog(@"station name %@",[stationnamespassed objectAtIndex:0]);

 }
  -(void) dealloc{
  [stationnamespassed release];
   [super release];
 }
@end

問題は、値が更新されておらず、NULL が返されることです。しかし、私は最初のバイを押してみましたが、うまくいきました。実際、私はすでにタブに存在していたので、そのView Controllerをプッシュしたくありません。

4

1 に答える 1

1

タブを選択すると、ビューが呼び出されて表示されます。この行は、タブコントローラーではなく、そのコントローラーの新しいオブジェクトを作成します。

secondviewcontroller = [[secondviewcontroller alloc]initWithNibName:@"NIbName" 
Bundle:nil];

あなたがしたいことをする。あなたはこのようなことをしなければならないでしょう

UINavigationController* navController = [[self.tabBarController viewControllers] objectAtIndex:/*your tab index on which desiredControllerResides*/];
NSArray* viewControllers= [navController viewControllers];
for(UIViewController *theController in viewControllers)
{
if([theController isKindOfClass:[secondviewcontroller]])
{
   theController.stationnamespassed = self.stationnamestobepassed;
//i.e  this line of your code secondviewcontroller.stationnamespassed = self.stationnamestobepassed;
}
}
于 2012-05-21T05:03:21.687 に答える