【发布时间】:2013-11-13 16:58:08
【问题描述】:
我有一个名为 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 对象的方法: 到达这里.h
#import <Foundation/Foundation.h>
@interface GettingHereContent : NSObject
@property (nonatomic, strong) NSString *content;
@end
GettingHere.m
#import "GettingHereContent.h"
@implementation GettingHereContent
@synthesize content;
@end
【问题讨论】:
-
gettingHere 定义在哪里?它是VC的财产吗?在 prepareForSegue 中尝试 sender.gettingHere.content:
-
不,sender.gettingHere.content 什么都不做。发件人。没有选择。是的,我在这个 UIViewController .h 文件中定义了到达这里:(必须在标志处省略堆栈溢出,不允许在评论中使用这些 - 但它们都存在于需要的地方)#import "GettingHereContent.h" interface SubNavViewController : UIViewController property GettingHereContent *到达这里;然后我在.m中合成如下: #import "GettingHereContent.h" interface SubNavViewController () end implementation SubNavViewController @ynthesize gettingHere;
-
能否在创建gettingHere的地方添加代码sn-p?
-
还要注释掉 buAirButtonClicked 方法中的 performSegueWithIdentifier 行,以确认 prepareForSegue 方法没有被其他路径调用。
-
嗯,如果它是一个综合属性 self.gettingHere 或者在这种情况下应该定义 sender.gettingHere。您能否在 prepareForSegue 中断点并验证堆栈跟踪来自 byAirButtonClicked: 方法