prepareForSegue没有设置UILabel

时间:2015-03-24 17:54:54

标签: ios objective-c uilabel segue

我有一个prepareForSegue方法设置,将{1}}的所有内容发送到destinationViewController,但UILabel上的destinationVC值除外。我扔了一个NSLog语句来查看它打印的值,它打印出我想要的内容。

它不会崩溃,但它没有设置。我知道我在这里遗漏了一些非常基本的东西,但它并没有向我跳出来。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(UIButton *)sender {
    if ([[segue identifier] isEqualToString:@"directionsSegue"]) {
        // Set destination view controller
        DirectionsViewController *destinationVC = segue.destinationViewController;

        // Pick out the "thing" you want to send to destinationVC
        CGPoint point = [sender convertPoint:CGPointZero toView:self.tableView];
        NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:point];

        // Set the "thing" on the destinationVC
        PointOfInterest *poi = [self.fetchedResultsController objectAtIndexPath:indexPath];
        destinationVC.destinationLabel.text = poi.name;
        NSLog(@"destinationVC.destinationLabel.text = %@", poi.name);
        destinationVC.destinationLatitude = poi.latitude;
        destinationVC.destinationLongitude = poi.longitude;

    }
}

我的属性在destinationVC的标题中声明:

@property (strong, nonatomic) IBOutlet UILabel *destinationLabel;

以下答案的解决方案:

神秘解决了!这是我做的:

在我的destinationVC上,我将其添加到我的标题中:

@property (nonatomic, strong) NSString *destinationName;

我把它放回实施中:

@property (strong, nonatomic) IBOutlet UILabel *destinationLabel;

destinationVC中,我将此添加到我的viewDidLoad

self.destinationLabel.text = self.destinationName;

2 个答案:

答案 0 :(得分:5)

您的标签在prepareForSegue中将为零,因为此时它不会实例化。实际上,一旦加载了视图,IBOutlet就会被初始化。这就是它无法正常工作的原因。

解决问题的最佳方法是在DirectionsViewController中创建另一个属性,用于存储文本。在控制器初始化之后,可以直接使用此标签,然后您可以直接在控制器中的任何位置设置标签。

答案 1 :(得分:2)

在视图控制器的视图加载之前,不会初始化IBOutlet对象。这发生在segue之后。创建自定义属性并在准备期间更新该属性,然后在viewDidLoad期间将其复制到您的标签。