2017-11-06 2 views
0

내 앱에서 가장 큰 문제 중 하나를 해결하는 방법을 찾고 있었지만,이 문제를 계속 수행하더라도 문제가 여전히 존재합니다. iOS/Swift: tableView cellForRowAtIndexPath crash. 필자가 제공 한 링크에 따르면 배열을 비운 후에 항상 reloadData를 기억하십시오. 그러나 문제는 여전히 존재하며 해결 방법을 모르겠습니다. CrashlyticsArrayview를 비운 후에도 reloadData를 수행 했더라도 Tableview cellForRowAt가 중단 되었습니까?

일부 로그 ...

내있는 tableview의 cellForRowAt 기능, 그리고 나도 내 스토리 보드에서 셀 식별자를 설정했다.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    // Crashed somewhere here 
    let currentRow = displayMainCell[indexPath.row] 

    guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? MainCell else { return UITableViewCell() } 


    if currentRow.id == "wotd" { 
     cell.contentLabel.font = UIFont(name: "Helvetica Neue", size: 22) 
    } else { 
     cell.contentLabel.font = UIFont(name: "Helvetica Neue", size: 13) 
    } 

    cell.titleLabel.text = currentRow.title 
    cell.contentLabel.text = currentRow.content 

    return cell 
} 

ADDED : 내가 다른보기 컨트롤러로도 내 didSelectRowAt에 문제가 있습니다. 다음은 구현입니다.

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

    let currentRow = wordLists[indexPath.row] 

    textField.text = currentRow 

    let currentWordToSearch = currentRow.condenseWhitespace().lowercased() 
    indicator.startAnimating() 

    saveWordToHistory(currentWordToSearch) 
    fetchWordFromDB(currentWordToSearch) 
    wordChange(wordToEncode: currentWordToSearch, uuid: getDeviceID()) 

    wordLists = [] 
    tableView.reloadData() 
    setupDatabase(suggWords: currentWordToSearch) 
    tableView.isHidden = true 

    textField.resignFirstResponder() 
} 
+0

가 더 나은 것 콘솔 로그를 추가 .. – karthikeyan

+0

이 당신의 displayMainCell과 단어 목록 배열이 중첩 : 나는 다음과 같은 코드를 시도하는 것이 좋습니다 것? 즉 [[String]]입니까? 이 배열에 저장된 유형은 무엇입니까? –

+0

@ karthikeyan는 콘솔 로그의 오류를 의미합니까? 지금까지 나는 어떤 문제에 직면하지는 않았지만 사용자는 무엇을했는지, 나는 무엇이 문제인지 모른다. – Drew

답변

0

확인 다음 함수는 상수 값을 반환하지 않습니다. 다음과 같아야합니다.

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return arrayName.count; 
} 

이미 수행중인 경우

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? MainCell else { return UITableViewCell() } 

if arrayName.count != 0 { 
let currentRow = displayMainCell[indexPath.row] 

if currentRow.id == "wotd" { 
    cell.contentLabel.font = UIFont(name: "Helvetica Neue", size: 22) 
} else { 
    cell.contentLabel.font = UIFont(name: "Helvetica Neue", size: 13) 
} 

cell.titleLabel.text = currentRow.title 
cell.contentLabel.text = currentRow.content 
} 
return cell 
} 
+0

arrayName.count == 0 인 경우 cellForRowAt는 여전히 빈 셀을 표시하고 아무 것도하지 않습니까? 아직도 추락할까요? Btw, 한 가지 문제가 추가되었지만 이번에는 didSelectRowAt에 대한 것입니다. 문제는 동일합니다. 해야할까요? arrayName.count! = 0 let currentRow = wordLists [indexPath.row] 뒤에? – Drew

+0

numberOfRowsInSection 및 arrayName.count = 0에 arrayName.count를 사용하는 경우 cellForRowAtIndexPath가 호출되지 않습니다. – Kadian

+0

당신의 문제는 요소가없는 특정 인덱스 배열의 요소에 액세스하려고한다는 것입니다. didSelectRowAt 문제에 대해 let currentRow = wordLists [indexPath.row] 앞에 arrayName.count! = 0을 두어야합니까? – Kadian

관련 문제