2013-09-26 4 views
0

목록을 만들고 UITableView에 표시하고 있습니다. 보고있는 동안 항목을 삭제 한 다음 업데이트 된 목록을 저장하여 새로 고침 버튼으로 이전 목록을 새로 고칠 수 있습니다. 나는 단추를 사용하여 현재 목록을 저장 한 다음 새로 고침 단추를 사용하여 데이터를보기로 다시로드합니다. 문제는 버튼을 누르지 않아도 저장 버튼 내의 코드가 항상 실행된다는 것입니다. 나는이 같은 최고의 설명 할 수있다 :UITableView 새로 고치지 않는다

btnSave.TouchUpInside += delegate { _ListCopy = new List<Tasks>(); 
}; 

btnReset.TouchUpInside += delegate { 
tblTotal.ReloadData(); 
tblTotal.DataSource = new ListDataSource(_ListCopy,txtTotalCost); 
}; 

tblTotal.DataSource = new ListDataSource (_ListOfTasks,txtTotalCost); 

내가 btnReset_ListCopy 데이터 소스로 다시로드 누를 때 나는이 테이블 뷰가 _ListOfTasks 목록을 보여줍니다 실행합니다. 내가 가지고있는 문제는 btnSave을 누르지 않아도 _ListCopy의 값이 할당된다는 것입니다. 이 경우보기가 지워집니다.

public override int RowsInSection (UITableView tableView, int section) 
{ return _ListOfTasks.Count; } <-- exception 

_ListCopy의 값이 비어 나에게 의미 : 나는 여기에 테이블 뷰 데이터 소스에 null 참조 예외가 나타날 _listCopy = new List<Tasks>(); 줄을 주석으로합니다. 나는 new List 대신 _ListCopy = _ListOfTasks을 만들 수 있다고 생각했습니다. 그러나 어떤 이유로 코드가 저장 버튼에 관계없이 실행되므로 원하는 목록 값을 저장할 수 없습니다. _ListCopy에게 알리지 않고 값이 할당되는 이유는 무엇입니까? 나는 그 어느 곳에도 값을 할당하지 않는다. 누군가 일어나는 일을 설명 할 수 있습니까? 대신에 사용할 수있는 다른 솔루션이 있습니까?

+0

당신이 보여준 것과 무슨 일이 일어나고 있는지 말하기는 어렵습니다. 필자가 먼저 꺼내는 점은 데이터 소스를 업데이트하기 전에 ReloadData()를 호출한다는 것입니다. 다른 방법으로 기대합니다. 둘째, TableViews는 항목을 삭제할 수있는 기능을 내장하고 있습니다. 왜 사용하지 않습니까? 더 많은 코드를 게시하면 더 많은 도움을받을 수 있습니다. – Jason

+0

테이블에서 삭제 중입니다. 이것은 추정 애플 리케이션. 회화 사업을 위해. 각 작업은 계산되어 테이블에 저장된 목록에 저장됩니다. 때때로 고객은 작업이 삭제되면 비용을 알고 싶어합니다. 원래 견적을 저장 한 다음 변경을 원하지만 원본 목록을 복원 할 수 있습니다. 먼저 원래 목록의 복사본을 만들려고했는데 리셋 단추를 누르면 복사본이 테이블 데이터 원본으로 전송되지만 쉽게 작업 할 수는 없습니다. – blue

답변

0

콘센트 설정이 잘못되었음을 발견했습니다. 어떤 이유로 나는 두 개의 콘센트를 에 연결하고 btnsave에는 콘센트를 연결하지 않았습니다. 그래서 리셋을 누를 때 btnsave 코드도 실행 중이었습니다. 나는 콘센트를 바로 잡아서 모든 문제를 해결했다. 원래 목록을 복사하는 방법 : 간단히 저장 기능으로 _ListCopy = _ListOfTasks을 만들려고했습니다. 이것은 변경 내용이 포함 된 _ListOfTasks의 메모리 위치 만 나타냅니다. 한 목록을 다른 목록으로 복사하는 foreach 루프를 작성하여이 문제를 해결했습니다.

foreach(var task in _ListOfTasks) 
{ 
    _ListCopy.Add(task); 
} 

이제 저장할 수 있으며 첫 번째 예상 값이 저장됩니다. 삭제를 수행 할 수 있으며 고객이 초기 예상치를 다시보고 싶으면 데이터를 새로 고침 할 수 있습니다.

관련 문제