0

我有一个名为 GettingHere 的 NSObject,它有一个 NSString *content。

然后我有一个 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];

对于操作:@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;
    }
}

segue 工作正常,但 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

到达这里.m

#import "GettingHereContent.h"
@implementation GettingHereContent
@synthesize content;
@end
4

1 回答 1

0

您永远不会分配初始化您的 gettingHere 属性。在你的 VC 的 init 方法中试试这个

gettingHere = [[GettingHereContent alloc] init];

也不要忘记释放它:从这里回答:alloc + init 具有综合属性 - 它会导致保留计数增加 2 吗? @interface Foo : Bar { SomeClass* bla; @property (nonatomic, 保留) SomeClass* bla; @结尾

@implementation Foo @synthesize bla; -(id)init { ... bla = [[SomeClass alloc] init]; ... } -(void)dealloc { [bla release]; ... [超级释放]; }

于 2013-11-02T17:59:39.323 回答