2016-08-17 1 views
1

다른 클래스에서 생성 한 0bject를 표시하는 tableView가 있습니다. 객체는 Array에 저장됩니다.commitEditingStyle을 사용하여 행 및 섹션 삭제

whiskyArray에서 데이터를 tableView로 옮기는 사전을 만듭니다. 사전 먼저 키와 문자와 값으로 객체의 이름으로 구성됩니다 이제

var alphabetizedWhiskies = [String: [WhiskyBuilder]]() 

나는 다음과 같은 방법으로 수행있는 tableView,에서 commitEditingStyle:와 세포를 삭제하려면 :

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) 

    if editingStyle == UITableViewCellEditingStyle.Delete { 

     alphabetizedWhiskies[Array(alphabetizedWhiskies.keys.sort())[indexPath.section]]!.removeAtIndex(indexPath.row) 

     if alphabetizedWhiskies[Array(alphabetizedWhiskies.keys.sort())[indexPath.section]]!.count == 0 { 

    alphabetizedWhiskies.removeValueForKey(Array(alphabetizedWhiskies.keys.sort())[indexPath.section]) 

    tableView.deleteSections(NSIndexSet(index:indexPath.section), withRowAnimation: .Fade) 

     }else { 

      tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade) 

      alphabetizedWhiskies.removeValueForKey(Array(alphabetizedWhiskies.keys.sort())[indexPath.row]) 

     } 
} 

이 방법은 실제로 완벽하게 작동하며 셀은 삭제됩니다. 그러나이보기로 돌아올 때마다 삭제 된 셀이 테이블에 다시 나타납니다. 저는 신속한 새로운 기능입니다. 그러나 셀이 사전에서 삭제되었지만 whiskyArray의 개체는 삭제되지 않았기 때문에 이러한 현상이 발생한다고 생각합니다. 나는 whiskyArray에서 개체를 삭제하려고했습니다 :

whiskyArray.removeAtIndex(indexPath.row) 

그러나이와

은 whiskyArray에있는 모든 개체는 내가 삭제하고 싶은 삭제 된 것이 아니라. 그렇다면 어떻게 tableView에서 셀을 삭제하여 whiskyArray에서 삭제할 올바른 객체에 액세스 할 수 있습니까? tableViewCells를 삭제하는 방법에 대해 많이 알았지 만 배열에서 의미 객체를 삭제하는 방법을 찾지 못했습니다. 아무도 나를 도울 수 있습니까?

답변

0

데이터가 실제로 제거되고 있는지 확인해야합니다. 배열에서 그것을 지울 때 그것은 단지 로컬 복사이고, 당신이보기를 떠나고 나의 추측으로 돌아올 때 당신은 본질적으로 모든 것을 다시 시작하는 배열로 데이터를 다시로드하고 있다는 것입니다. UITableView 코드와 아무런 관련이 없습니다.

0

좋아요 ... 내가 말할 수있는 것에서 여러 가지 문제가 있습니다. 당신이 삭제대로 삭제할 때

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return ??????????? 
} 

에 사용하는 무엇이든 값

우선은 변경되지 않습니다. 행이 사라지는 이유는 수동으로 행을 삭제 한 다음 tableView.reloadData()가 호출 된 뷰를 다시로드하기 때문입니다.

이 줄은 사용하지 않을 것입니다.

tableView.deleteSections(NSIndexSet(index:indexPath.section), withRowAnimation: .Fade) tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)

이 기능이 실행되고 있다는 사실은있는 tableView가 이미 해당 indexPath를 삭제 계획이다 ... 당신이 정말로 그냥 indexPath 이상을 삭제하려는 경우가 아니면 의미한다.

다음 ...보기 컨트롤러가 해제 될 때마다 (이전보기로 돌아가거나 세부 묘사 세부 사항 및 기타 조건을 사용할 때 발생 함) viewController의 상태를 잃고 viewDidLoad가 정사각형으로 다시 시작합니다. 핵심 데이터와 같은 영구 저장소에 정보를 저장하지 않는 한

다음으로 정렬 기능을 사용하고 있습니다. 사용하고 있기 때문에 whiskyArray의 정보가 같은 방식으로 정렬되는지 또는 삭제 된 객체가 임의로 겉으로보기에 있는지 확인해야합니다.