我有一个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;
答案 0 :(得分:5)
您的标签在prepareForSegue
中将为零,因为此时它不会实例化。实际上,一旦加载了视图,IBOutlet就会被初始化。这就是它无法正常工作的原因。
解决问题的最佳方法是在DirectionsViewController
中创建另一个属性,用于存储文本。在控制器初始化之后,可以直接使用此标签,然后您可以直接在控制器中的任何位置设置标签。
答案 1 :(得分:2)
在视图控制器的视图加载之前,不会初始化IBOutlet对象。这发生在segue之后。创建自定义属性并在准备期间更新该属性,然后在viewDidLoad
期间将其复制到您的标签。