2017-10-17 5 views
0

Chaque fois que j'exécute l'application, le tableView n'a aucune donnée, attendant que l'utilisateur entre. Le problème est que si le numberOfSections est 1, cela fonctionne très bien, mais quand je change à 2, il se bloque parce que l'indice hors de portéeUITableView Section Index Hors des limites mais ce n'est pas vraiment hors limites

func numberOfSections(in tableView: UITableView) -> Int { 
    return 2 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    guard let cell = tableView.dequeueReusableCell(withIdentifier: "expenseCell") as? ExpenseCell else { return UITableViewCell() } 
    let budget = userBudget[indexPath.section][indexPath.row] 
    cell.delegate = self 
    cell.configureCell(budget: budget) 
    return cell 
} 

func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { 
    return true 
} 

func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle { 
    return UITableViewCellEditingStyle.none 
} 

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return userBudget[section].count // <- Crash here 
    } 

func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 
    return "Practice with Sections \(section)" 
} 
+1

Que sont les données dans userBudget arrray? – iPatel

+0

Il n'y a qu'un seul tableau dans 'userBudget'. Donc d'abord la valeur de 'userBudget' et assurez-vous qu'il a plusieurs tableaux. –

+1

changez votre numberOfSections pour retourner userBudget? .count ?? 0 (si userBudget est optionnel) ow userBudget.count. Ne pas coder en dur la valeur. –

Répondre

0

Il est parce que vous accédez à index 1 de userBudget alors que je suppose qu'il contient 0 index seulement.

+0

Je ne comprends pas ce que vous essayez de dire. – AndreiVataselu

0

Ce blocage se produit provoquer votre tableau userBudget, n'a pas deux éléments au moment où vous essayez d'accéder à sa deuxième position.

Vous devez garder que userBudget a deux éléments sur minimium ...

Vous devriez que vous devez attribuer la valeur à userBudget sur votre viewDidLoad.

+0

Mais comment est-ce possible? Comme je l'ai dit, le var ** userBudget ** était un tableau à 1 dimension et tout a bien fonctionné. Je l'ai maintenant défini comme étant 2D Array et j'utilise seulement une section, donc * userBudget [0] [indexPath.row] *, est la même chose qu'un tableau 1D, cependant, cela plante. Je ne peux pas définir une valeur dans 'ViewDidLoad' puisque l'utilisateur n'a encore rien saisi. – AndreiVataselu

0

Vous dites que vous aurez deux sections à votre délégué tableView, mais vous avez un tableau qui contient un seul tableau. Fondamentalement, lorsque vous essayez d'atteindre userBadget [1] dans votre fonction numberOfRowsInSection et qu'il se bloque parce qu'il n'existe pas.

Remplacer

func numberOfSections(in tableView: UITableView) -> Int { 
    return 2 
} 

Avec

func numberOfSections(in tableView: UITableView) -> Int { 
    return userBudget.count 
}