将数据从一个视图传递到另一个视图(故事板,iOS)

时间:2011-12-22 19:06:58

标签: ios objective-c storyboard

这是我到目前为止所得到的。 mainview.m

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender(id)sender {
secondView *secView = [segue destinationViewController]
secView.ext = @".com";
}

secondView.h

@interface secondView : UIViewController {
NSString *ext;
 }
@proper (nonatomic, retain) NSString *ext;
@end

secondView.m

-(void)viewDidLoad {
NSString *url = [@"www.google" stringByAppendingFormat:ext]
}

它返回一个错误,说ext是null ...我做错了什么?

4 个答案:

答案 0 :(得分:1)

您是否尝试将ext转换为属性?我的理解是“点”符号本质上将您的代码转换为

[secView setExt:@".com"]

所以将SecondView.h转换为

@interface secondView : UIViewController

@property (nonatomic, copy) NSString *ext;

@end

不要忘记在.m文件中对它进行@synthesize

答案 1 :(得分:1)

检查以下内容:

  1. 确保@synthesize ext;在SecondView.m
  2. 在Storyboard中,您是否正确链接了segue?
  3. 在Stodyboard中,viewController是否将SecondView定义为SecondView类?
  4. 确保您通过prepareForSegue:sender方法调用SecondView(即代码中的其他位置pushViewController:animated不会调用SecondView。)

答案 2 :(得分:1)

在该行放置一个断点:

secView.ext = @".com";

并确保在分配后正确设置ext ivar。如果不是,您可能会指定访问者在@synthesize ext指令中使用不同的ivar,或者您可能提供了一个未正确设置ivar的setter -setExt:

如果在分配后正确设置了ext ,那么您可能有两个不同的secondView实例。当人们使用.xib文件时,过去常常发生这种情况 - 他们在代码中创建一个视图控制器,并在.xib文件中创建另一个相同类的实例。我不希望这是因为你从segue直接得到secView,但值得思考。

答案 3 :(得分:1)

有两种观点:view1和view2。

  • 在view1.h
  • 中添加view2.h文件
  • view2的init对象并设置其变量。