0

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
4

1 に答える 1