我正在尝试将NSString
(message
)从ViewController
(发件人)传递给MyViewController
(接收方)。
我在MyViewController
中创建了一个名为ViewController
的{{1}}实例,通过该实例我使用testViewContoller
方法发送NSString
:
setTitle:
这是MyViewController *testViewController = [[MyViewController alloc] init];
[testViewController setTitle:message];
:
MyViewController.h
这是- (void)setTitle:(NSString*)title;
:
MyViewController.m
我不完全确定为什么这不起作用,但我认为它与调用- (void)setTitle:(NSString*)title {
_testField.text = title;
}
之前的viewDidLoad
加载有关。
非常感谢您提供的任何帮助。
谢谢。
答案 0 :(得分:0)
_testField
在哪里创建?如果它在viewDidLoad
中,那么当您调用nil
时,它就是setTitle
,这意味着它是一个无操作。将视图添加到窗口时会调用viewDidLoad
,这意味着如果您只是在视图控制器上调用init
viewDidLoad
可能永远不会被调用。
我会在MyViewController
上定义一个属性,这是所需的字段文本,然后_testField.text = title
中有viewDidLoad
:
MyViewController *testViewController = [[MyViewController alloc] init];
testViewController.testFieldText = message;
- (void)viewDidLoad {
[super viewDidLoad];
// do something to initialize _testField here
_testField.text = title;
}
另请注意,UIViewController
已有一个名为title
的属性,并且覆盖setTitle:
可能会产生您不期望的副作用。
答案 1 :(得分:0)
这基本上与将内存分配给_testField
的时间有关。
如果您使用_testField
以编程方式创建viewDidLoad
MyViewController *testViewController = [[MyViewController alloc] init];
testViewController.testFieldText = message;
这两行无效,因为内存尚未分配给_testField so the text cannot come up.
即使你在故事板上创建它并在方法中分配字符串
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
SecondViewController *obj = segue.destinationViewController;
[obj setTitle:@"New Title"];
}
由于再次未分配内存,因此也无济于事。这个问题的简单解决方案是:
在设置MyViewController
之前访问_testField
的view属性,例如:
MyViewController *obj = [[MyViewController alloc] init];
[self.navigationController pushViewController:obj animated:YES];
[obj setTitle:@"New Title"];
在@property
的{{1}}中设置字符串,并将字符串从属性重新分配给MyViewController
。
是的,_testField
是setTitle
的属性,如果你自定义它会混淆默认属性。安全玩......:)
答案 2 :(得分:-1)
在第一个ViewController中,您已使用以下
SecondViewcontroller *MyViewController = [[self storyboard] instantiateViewControllerWithIdentifier:@"SecondViewcontroller"];
MyViewController.Title = @"Welcome";
[self presentViewController:MyViewController animated:YES completion:Nil];
在secondViewcontroller中使用以下
要编辑的secondViewcontroller.h文件
@interface SecondViewcontroller : UIViewController
@property (strong, nonatomic) NSString *Title;
@end
然后将Title值打印到secondviewcontroller