2017-05-23 2 views
2

내가 거기에있는 단순히 TODO 목록이 있습니다대리인을 사용하여 viewDidLoad에서 tableview를 어떻게 다시로드 할 수 있습니까?

  • 프로토콜의 방법 reloadTableViewWhenItChanges;
  • 데이터 가져 오기 (즉, 핵심 데이터);

컴파일러를 정지/실행 한 후에 표보기가 새로 고침됩니다. 그러나 managedObjectContext에서 변경된 후에 만 ​​위임 테이블 다시로드를 사용하여 viewDidLoad (viewWillAppear/viewDidAppear에 없음)의 테이블보기를 다시로드해야합니다.

내가 어떻게 할 수 있습니까? 여기

내 코드 (? 무엇을 내가 예를 들어, 내 코드에 [self.tableView reloadData]을 넣어야 할 것이 잘못입니까?) :

@eik_cloner에서 언급 한 바와 같이
- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.title = @"Note List"; 
    self.barButtonAddNote = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd 
                      target:self 
                      action:@selector(addNewNote:)]; 
    [self.navigationItem setRightBarButtonItem:self.barButtonAddNote animated:YES]; 
    [self reloadTableViewWhenItChanges]; } 

- (void)reloadTableViewWhenItChanges // protocol's method { 
    self.addNoteViewController.delegate = self; 
    if ([self.managedObjectContext hasChanges]) 
    { 
     NSError *error; 
     [self.managedObjectContext save:&error]; 
    } 
    [self fetchData]; 
    [self.tableView reloadData]; } 

- (void)fetchData { 
    NSFetchRequest *request = [[NSFetchRequest alloc]init]; 
    NSEntityDescription *note = [NSEntityDescription entityForName:@"Note" 
inManagedObjectContext:self.managedObjectContext]; 
    [request setEntity:note]; 

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"task" ascending:YES]; 
    NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil]; 
    [request setSortDescriptors:sortDescriptors]; 

    NSError *error = nil; 
    NSArray *mutableFetchResults = [self.managedObjectContext executeFetchRequest:request error:&error]; 

    if (mutableFetchResults != nil){ 
     self.notesArray = [[NSMutableArray alloc] initWithArray:mutableFetchResults]; 
    } } 
+1

나는 당신이 뭔가 오해했다고 생각합니다. 당신의 View Controller가 처음으로로드 될 때, tableView는 자동으로 처음 제공된 데이터를 사용하여 다시로드됩니다. 하지만 나중에 tableView를 업데이트하려고한다고 가정 해 봅시다.이 경우 코드에서 reloadData 함수를 호출해야합니다. 그리고 ViewController를 변경할 때까지 viewDidLoad 메서드가 자동으로 다시 호출되지 않습니다. –

+2

'-viewDidLoad'에서보기가보기와 같은 네비게이션 스택에 들어간 후에보기가 렌더링되기 때문에 테이블보기에 대해 한 가지를 다시로드 할 수 없습니다. '-viewWillAppear :'정도입니다. – holex

+0

NSFetchedResultsController 사용을 고려하십시오. – Koen

답변

2

, 당신은 할 필요가 없습니다 자동으로 완료되었으므로 표보기를 viewDidLoad에 다시로드하십시오. 그런 다음 수동으로 수행 할 경우 원하는 목적지
당신은 UITableViewreloadData 메소드를 호출 할 필요가로 :

[yourTableView reloadData]; 
0

목표 C에서 : - 스위프트에

[tableViewName reloadData]; 

: -

tableViewName.reloadData() 

UIStoryboard 또는 By 코드를 통해 UIViewController를 사용하여 대리인을 구성했는지 확인하십시오.

관련 문제