我可以使用prepareForSegue方法在兩個視圖控制器之間傳遞數據。但是通過這種方式,傳遞的數據不能在第二個視圖控制器的init方法中使用。iOS - 將數據從一個視圖控制器傳遞到另一個視圖控制器的init方法中使用
另外,我正在使用XLForm。因此在init方法內訪問數據是必要的。
任何人都可以幫助我解決這個問題。
這裏的第一個視圖控制器的prepareForSegue方法:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"SessionToWorkout"])
{
WorkoutsViewController *vc = [segue destinationViewController];
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
UITableViewCell *selectedCell = [self.tableView cellForRowAtIndexPath:indexPath];
cellName = selectedCell.textLabel.text;
NSString *sectionTitle = [self tableView:self.tableView titleForHeaderInSection:indexPath.section];
sectionName = sectionTitle;
vc.sectionName = sectionName;
vc.cellName = cellName;
}
}
而這裏的第二個視圖控制器的initWithCoder方法:
- (instancetype)initWithCoder:(NSCoder *)coder
{
self = [super initWithCoder:coder];
if (self) {
//Retrieve Workouts from DB
NSString *day_id;
day_id = [[DBHandler database] getDayIdWhere:@[@"day_name"]
whereValues:@[cellName]];
workoutsArray = [[DBHandler database] getWorkoutsForDayWhere:@[@"day_id"]
whereValues:@[day_id]];
AppLog(@"Workouts array %@", workoutsArray);
[self initializeForm];
}
return self;
}
裏面的initWithCoder方法,我需要使用單元名變量的值(已從前一視圖控制器傳遞給此視圖控制器)調用數據庫方法。
任何想法或建議如何做到這一點? 在此先感謝。
您可以使用變量'didSet'觀察員,以初始化數據庫。 –
@MichaëlAzevedo對不起,我不熟悉didSet觀察者。你能進一步解釋嗎? – Isu
我剛剛加了一個答案:) –