まず、回答に入る前に、他インスタンスから、インスタンス変数を参照するのはやめましょう。Objective-Cの仕様として、「->」を使ってできることにはなっていますが、いろいろ問題をはらんでいるので、実践では推奨されず、かわりにプロパティの参照を行うことになっています。プロパティについては、書籍やネット検索でお調べください。「Objective-C プロパティ アクセッサメソッド」というようなキーワードで検索すると、有益な情報にヒットするでしょう。
以下、そのプロパティを使って、サンプルコードを書いてみます。
ParentViewControllerからChildViewControllerに画面遷移し、ChildViewControllerからParentViewControllerのプロパティを参照します。
なお、Modal Viewでなく、Navigationによる画面遷移を行っています。
/* ParentViewController.h */
#import <UIKit/UIKit.h>
@interface ParentViewController : UIViewController
@property (assign) int value; // ChildViewControllerに渡す値
- (IBAction)goChild: (id)sender;
@end
/* ParentViewController.m */
#import "ParentViewController.h"
#import "ChildViewController.h"
@interface ParentViewController ()
@end
@implementation ParentViewController
- (IBAction)goChild: (id)sender
{
self.value = 11; // 仮に11としておく
ChildViewController *childViewController = [[ChildViewController alloc] initWithNibName: @"ChildViewController" bundle: nil];
[self.navigationController pushViewController: childViewController animated: YES];
childViewController.parent = self;
[childViewController release];
}
@end
/* ChildViewController.h */
#import <UIKit/UIKit.h>
@class ParentViewController; // ヘッダファイルをインポートせずに、クラスを宣言するときに必要
@interface ChildViewController : UIViewController
@property (nonatomic, retain) ParentViewController *parent;
@property (nonatomic, retain) IBOutlet UILabel *result; // ラベルに結果を表示
@end
/* ChildViewController.m */
#import "ChildViewController.h"
#import "ParentViewController.h"
@interface ChildViewController ()
@end
@implementation ChildViewController
- (void)viewDidAppear:(BOOL)animated // viewDidLoad:に実装すると、うまく働かない。
{
[super viewDidAppear: animated];
int parentValue = self.parent.value;
self.result.text = [NSString stringWithFormat: @"The parent value = %d", parentValue];
}
@end