@Artem_AK

Как обновить ViewController используя viewDidLoad?

По задумке введенные данные после нажатия на кнопку "Save" должны отобразиться в таблице.
Логика такая - нажимая кнопку "Save" введенные данные передаются в базу данных, затем отрабатывает viewDidLoad в котором из бд загружается текущее содержимое массива + введенные данные.
На данный момент после нажатия кнопки "Save" отображается лог с содержимым массива, в котором добавленный элемент присутствует , а таблица контроллера остается без изменений. Новый элемент отображается только после перехода на предыдущий в иерархии контроллер и возращении обратно.
В чем заключается проблема?
Ниже представлены код и скриншот экрана.
Спасибо.
649a6b6e27ac461184ed95cd35cb7602.png
@interface SetVC ()

@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;

@property (weak, nonatomic) IBOutlet UITextField *kgTextField;
@property (weak, nonatomic) IBOutlet UITextField *repsTextField;
@property (weak, nonatomic) IBOutlet UITextField *noticeTextField;
@property (weak, nonatomic) IBOutlet UILabel *exerciseNameTextLabel;

@property (strong, nonatomic) NSArray *listOfSets;


@end

@implementation SetVC

- (void)viewDidLoad {
    [super viewDidLoad];
    
    AppDelegate *appDeligate = [[UIApplication sharedApplication] delegate];
    self.managedObjectContext = [appDeligate managedObjectContext];

    self.exerciseNameTextLabel.text = self.exerciseName;

    self.listOfSets = [DataManager retrieveListOfSetsByExerciseName:self.exerciseName withContext:self.managedObjectContext];
    NSLog(@"%@", self.listOfSets);
}



- (IBAction)saveButton:(UIButton *)sender {

    [DataManager addSetToExercise:self.kgTextField.text withReps:self.repsTextField.text withNotice:self.noticeTextField.text withExerciseName:self.exerciseName withContext:self.managedObjectContext];
    
    [self viewDidLoad];
    
}


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    
    return self.listOfSets.count;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellIdentifier"];
    
    cell.textLabel.text = [[self.listOfSets objectAtIndex:indexPath.row] stringValue];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cellIdentifier"];
    }
    
    return cell;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    
}


@end
  • Вопрос задан
  • 1620 просмотров
Решения вопроса 1
ManWithBear
@ManWithBear
Swift Adept, Prague
У вас каша в голове. viedDidLoad вызывается у контролера, когда его вьюшка полностью загружена. Зачастую, это происходит вообще один раз за время жизни контроллера.
В вашем случае вам нужен отдельный метод, который будет загружать данные из базы, и отправлять таблице [_table reloadData];

UPD Советую хорошенько прочитать и разобраться с этой статьей ---> КЛИК!
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы