2012-07-02 6 views
1

저는 사용자가 편집 할 수있는 일부 데이터를 표시하기 위해 UITableView 컨트롤을 사용하고 있습니다. 세부 사항을 편집하기 위해 사용자는 새로운 뷰를 스택에 푸시하는 편집 버튼을 탭합니다. 사용자는 데이터를 편집하고 저장 버튼을 누르고 데이터가 plist에 저장되고 뷰가 스택에서 튀어 나옵니다. plist가 업데이트되었지만 UITableView는 여전히 이전 데이터를 표시합니다. 이 문제는 viewWillAppear 메서드에서 reloadData에 대한 호출을 추가하여 해결할 수 있습니다. 그러나 뷰가 처음로드 될 때 reload 문을 추가하여 데이터가 올바르게 표시되면 이중 바인딩을 의미합니까? 그렇다면 어떻게 피할 수 있습니까?UITableView 새로 고침 쿼리

- (void) viewWillAppear:(BOOL)animated 
{ 
[super viewWillAppear:animated]; 
int orientation = [[UIDevice currentDevice] orientation]; 
if(orientation != UIDeviceOrientationUnknown) 
    [self willRotateToInterfaceOrientation:orientation duration:0]; 
} 

사람이 왜 작동 방법/설명 할 수 :

내가 명시 적으로 reloadData를 호출하지 않고 새로 고침을 강제로 다음 코드 ( here를) 발견?

답변

1

링크의 트릭은 더러운 해킹입니다. 데이터를 다시로드 할뿐만 아니라 테이블을 다시 그리도록 강요합니다. 그것은 당신의 테이블에 다른 UI 요소와 함께 그려 지도록 장치가 새로운 오리엔테이션을 얻고 있다고 알려줍니다.

UITableView에서 단일 행 또는 특정 행 집합을 새로 고치는 일반적인 방법은 해당 reloadRowsAtIndexPaths:withRowAnimation: 메서드를 호출하는 것입니다. 이렇게하면 데이터 소스를 호출하여 업데이트 된 행만 데이터를 가져오고, 전체 재 장전을 방지합니다.

1

이 작업을 수행 :

- (void) viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    //remove all objects from yourTableViewDataSourceArray 
    [yourTableViewDataSourceArray removeAllObjects]; 

    //add new records from plist 
    yourTableViewDataSourceArray = plist request of data here 

    //reload table now 
    [yourtableView reloadData]; 
} 
관련 문제