У меня есть tableView
, из которого я перехожу к «viewController», то есть PassengerInfoViewController
, в котором у меня есть форма. Заполните форму, сделайте из нее dictionary
и добавьте ее в NSMutableArray
.Как заполнить массив из detailViewController и вернуться к masterViewController в iOS?
Итак, когда я возвращаюсь к таблице tableView' I would like to pass this array and then reload the
tableView` с заполненным массивом.
Так вот, что я делаю: -
//navigate to the form
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
PassengerInfoViewController *pivc = [self.storyboard instantiateViewControllerWithIdentifier:@"PassengerInfoViewController"];
[self.navigationController pushViewController:pivc animated:YES];
}
//After filling up the form
-(void)goBackToPassengerDetails:(UIButton*)sender{
NSString *title = self.titleTextField.text;
NSString *fname = self.firstNameTextField.text;
NSString *lname =self.lastNameTextField.text;
NSString *ageStr = self.ageTextField.text;
NSMutableDictionary *dict = [[NSMutableDictionary alloc]init];
[dict setValue:title forKey:@"title"];
[dict setValue:fname forKey:@"firstName"];
[dict setValue:lname forKey:@"lastName"];
[dict setValue:ageStr forKey:@"age"];
Passenger *passengerObj = [Passenger sharedInstance]; //Singleton
[passengerObj.passengerDetailArray addObject:dict];
PassengerDetailsViewController *pdc = [self.storyboard instantiateViewControllerWithIdentifier:@"PassengerDetailsViewController"];
[pdc getPassengerinfo:passengerObj.passengerDetailArray];
[self.navigationController popViewControllerAnimated:YES];
После того, как я вернуться обратно я перезагрузить таблицу view.However celForRow
метод не заселить новые значения.
-(void)getPassengerinfo:(NSMutableArray*)arr{
passenger_infoArray =[[NSMutableArray alloc]init];
passenger_infoArray = arr;
NSLog(@"Passenger Info Array : %@", passenger_infoArray);//Shows array of dictionaries
[passengerInfoTableView reloadData];
}
Мой cellForRow
метод выглядит следующим образом:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//Not called when I am doing reload data
static NSString *CellIdentifier = @"Cell";
cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier ];
}
NSLog(@"Table view array : %@",passenger_infoArray);
if (passenger_infoArray.count>0) {
NSString *temp= [[passenger_infoArray objectAtIndex:indexPath.row]objectForKey:@"firstName"];
cell.textLabel.text = temp;
}else{
cell.textLabel.text = [NSString stringWithFormat:@"Passenger %ld", (long)indexPath.row+1];
cell.imageView.image = [UIImage imageNamed:@"user.png"];
}
return cell;
}
Ну, причина, по которой я использовал одноэлементный массив, заключалась в том, что я хотел сохранить предыдущие значения, т. Е. Если бы я добавил словарь к нему ранее. Я просто хочу добавить новый словарь в массив. – iSD
, тогда в этом случае вы должны сохранить предыдущий массив либо в prefrence, либо в базе данных – Indrajeet
Я получаю массив, когда возвращаюсь сейчас. Но даже после вызова reloadData в представлении таблицы строка cellFor не читает код, в котором я его заполняю из массива. Любая идея, почему? См. мой обновленный вопрос. – iSD