1

我正在尝试将NSStringmessage)从ViewController(发送者)传递给MyViewController(接收者)。

我创建了一个MyViewControllerin ViewControllercalled实例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之前的加载有关setTitle:

您能提供的任何帮助将不胜感激。

谢谢你。

4

3 回答 3

0

这基本上与内存分配给_testField. 如果您以编程方式创建_testFieldinviewDidLoad

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"];
    }

这也无济于事,因为再次没有分配内存。这个问题的简单解决方案是:

  1. MyViewController在设置_testField例如之前访问视图属性:

    MyViewController    *obj = [[MyViewController alloc] init];
    [self.navigationController pushViewController:obj animated:YES];
    [obj setTitle:@"New Title"];
    
  2. 将字符串设置在 a@propertyMyViewController,并将字符串从属性重新分配给_testField

是的,setTitle是 的一个属性UIViewController,如果您自定义它将与默认属性混淆。安全起见... :)

于 2013-04-24T03:14:13.197 回答
0

在哪里_testField创建?如果它是 in viewDidLoad,那么它就是nil当你调用 时setTitle,这意味着它是一个无操作。 viewDidLoad当视图添加到窗口时调用,这意味着如果您只是调用init视图控制器viewDidLoad可能永远不会被调用。

我会在其上定义一个属性,MyViewController即所需的字段文本,然后_testField.text = titleviewDidLoad

MyViewController *testViewController = [[MyViewController alloc] init];
testViewController.testFieldText = message;

- (void)viewDidLoad {
     [super viewDidLoad];

     // do something to initialize _testField here

     _testField.text = title;
}

另请注意,UIViewController已经有一个名为的属性title,并且覆盖setTitle:可能会产生您没有预料到的副作用。

于 2013-04-24T02:05:55.040 回答
-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

于 2015-11-02T11:35:20.913 回答