NSString * content を持つ GettingHere という NSObject があります。
次に、次のようにプログラムでボタンを作成する UIViewController を用意します (このボタンは意図したとおりに機能します)。
byAirButton = [UIButton buttonWithType:UIButtonTypeCustom];
byAirButton.tag = 1;
byAirButton.frame = CGRectMake(25, 140, 280.f, 40.f);
UIImage *airButton = [UIImage imageNamed:@"gettingHereByAirButton.png"];
[byAirButton setBackgroundImage:airButton forState:UIControlStateNormal];
[self.view addSubview:byAirButton];
[byAirButton addTarget:self action:@selector(byAirButtonClicked) forControlEvents:UIControlEventTouchUpInside];
action:@selector(byAirButtonClicked) については、次のようにします。GettingHere は GettingHere オブジェクトのインスタンスです。
- (void) byAirButtonClicked
{
gettingHere.content = @"This is how to get here by Air";
NSLog(@"Content: %@", gettingHere.content);
[self performSegueWithIdentifier:@"gettingHereSegue" sender:self];
}
アイデアは、GettingHere オブジェクトのコンテンツを設定し、ユーザーが byAirButton をクリックしたときに、次のビュー (GettingHereViewController) からそれを呼び出すだけです。この NSLog は、コンテンツが設定されていることを示しています。
私の prepareForSegue では、次のことを行います。
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"gettingHereSegue"])
{
NSLog(@"Content to be passed: %@", gettingHere.content);
GettingHereViewController *vc = (GettingHereViewController *)segue.destinationViewController;
vc.gettingHere.content = gettingHere.content;
}
}
セグエは正常に動作しますが、NSLog では、gettingHere オブジェクトの値が (null) として表示されます。
どこが間違っているのか教えてもらえますか?私は何度かそれを経験しましたが、どこが間違っているのかわかりません。
編集:GettingHereオブジェクトをインスタンス化する方法は次のとおりです。
SubNavViewController.h で
#import "GettingHereContent.h"
@interface SubNavViewController : UIViewController
@property GettingHereContent *gettingHere;
SubNavViewController.m で
#import "SubNavViewController.h"
#import "GettingHereViewController.h"
#import "GettingHereContent.h"
@interface SubNavViewController ()
@end
@implementation SubNavViewController
@synthesize gettingHere;
次に、GettingHere オブジェクトを作成する方法を示します: GettingHere.h
#import <Foundation/Foundation.h>
@interface GettingHereContent : NSObject
@property (nonatomic, strong) NSString *content;
@end
GettingHere.m
#import "GettingHereContent.h"
@implementation GettingHereContent
@synthesize content;
@end