我做了一个segue传递一个字符串,告诉下一个视图控制器解析CoreData的实例。问题是,我正在使用一些调用init方法的代码,并且在调用时不会初始化发送的字符串。但是,当我在目标视图控制器的viewDidLoad
中显示字符串时,segue正在工作- (id)init
{
self = [super init];
if (self)
{
[self initFakeData];
}
return self;
}
当调用initFakeData方法时,它会设置一个图表并需要练习来保存有效值
- (void)initFakeData
{
NSString *myExercise=exercise; //returns nil
if (myExercise==nil)
{
myExercise=@"Default";
}
}
...同时
-(void)viewDidLoad{
NSString *myExercise=exercise; //returns value
}
exercise是一个属性,由tableview中的前一个视图控制器初始化
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
if ([segue.identifier isEqualToString:@"showGraph"]) {
JBLineChartViewController *destViewController = segue.destinationViewController;
NSString *myExericse=[NSString stringWithFormat:@"%@", [[_exercises valueForKey:@"exercise"]objectAtIndex:indexPath.row]];
NSLog(@"%@",myExericse);
destViewController.exercise = myExericse;
}
}
答案 0 :(得分:1)
行为是正确的,因为在init
期间exercise
中的JBLineChartViewController
未设置。如果您需要exercise
方法中的init
属性来设置必须在viewDidLoad
之前的某些行为,我的建议是不使用segue
,而是指定initWithExercise
1}}并在代码中推送控制器。也许是这样的:
- (IBAction)chartButtonPressed:(id)sender {
JBLineChartViewController *vc = [[ShopViewController alloc]initWithExercise:@"EXERCISE_STRING_HERE"];
[self showViewController:vc sender:self];
}
答案 1 :(得分:0)
在调用 prepareForSegue
之前,新的视图控制器已分配并初始化。您需要对CoreData执行的任何操作都应在viewDidLoad
中完成。或者你可以稍后再做,例如在viewWillAppear
或viewDidAppear
。