2015-11-24 2 views
0

Мой Tableview отображает список картфатальная ошибка: неожиданно нашли ноль в то время как разворачивание необязательное значение стрижа при выборе Tableview ячеек

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell = cardsTable.dequeueReusableCellWithIdentifier("SelectableCardCell", forIndexPath: indexPath) as! CardSelectionTableViewCell 
    let cardCell: Card! 
    if self.delegate is CardsApprovalsViewController { 
     cardCell = approvalCards[indexPath.row] // approvalCard array of type card 
    } else { 
     cardCell = fetchedResultsController.objectAtIndexPath(indexPath) as! Card 
    } 
    cell.policyHolderName.text = cardCell.policy_holder_name 
    cell.alphaMark.text = cardCell.policy_holder_name.substringToIndex(advance(cardCell.policy_holder_name.startIndex, 1)).uppercaseString 
    var image: NSData = cardCell.photo as NSData 
    cell.picture.highlightedImage = UIImage(data: image) 
    cell.cardNumber.text = cardCell.member_id 
    cell.policyNumberLabel.text = cardCell.policy_no 
    cell.insuranceNameLabel.text = cardCell.insurance.company_name 
    return cell 
} 

Afetr выбора одной ячейки, я хочу этикетки cell.alphaMark быть скрыта, чтобы отобразить cell.picture.highlightedImage

и если пользователь выбирает другую ячейку, cell.alphaMark для предыдущей ячейки должен появиться снова

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    var selectedCell: CardSelectionTableViewCell = cardsTable.cellForRowAtIndexPath(indexPath) as! CardSelectionTableViewCell 
    selectedCell.alphaMark.hidden = true 
    let newSwiftColor = UIColor(red: 224, green: 227, blue: 224) 
    selectedCell.contentView.backgroundColor = newSwiftColor 
    if self.delegate is CardsApprovalsViewController { 
     self.card = approvalCards[indexPath.row] 
    } else { 
     self.card = fetchedResultsController.objectAtIndexPath(indexPath) as! Card 
    } 
} 

func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) { 
    var selectedCell = cardsTable.cellForRowAtIndexPath(indexPath) as! CardSelectionTableViewCell // Some times crashes here 
    selectedCell.alphaMark.hidden = false 
} 

W я выбираю ячейку и выбираю другую ячейку ... и т. д. (выбор ячеек неоднократно) alphaMark и picture.highlightedImage отлично работает, но затем он останавливается и дает мне «неожиданно найденный нуль при разворачивании параметра« Необязательное значение »

Я проверил выходы ячейки и подключены к раскадровке

Может кто-нибудь помочь мне с этой ошибкой? Благодаря

+0

Выбран ли предыдущий элемент (который будет отменен, выбрав другой) вне экрана? – Larme

+0

@ Larme да это – Maha

+0

какая линия вызывает крушение? Или, спросил по-другому, какова последняя строка? –

ответ

3

Проще всего сделать, чтобы предотвратить сбои, чтобы перейти от принудительного разворачивания из необязательных и использовать if let вместо:

func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) { 
    if let selectedCell = cardsTable.cellForRowAtIndexPath(indexPath) as? CardSelectionTableViewCell { 
     selectedCell.alphaMark.hidden = false 
    } 
} 

Это будет принимать во внимание, что cardsTable.cellForRowAtIndexPath(indexPath) может возвращать ноль, так пытаясь развернуть его на CardSelectionTableViewCell, вы не сможете развернуть ноль в CardSelectionTableViewCell)

Это предотвратит сбой, но это не будет полностью выполнять то, что вы пытаетесь сделать. Вам также необходимо будет обновить cellForRowAtIndexPath, чтобы проверить, соответствует ли текущая ячейка selected и обновит alphaMark.hidden соответственно.

Так один быстрая трещина, как сделать это было бы добавить это к концу cellForRowAtIndexPath так, что каждый раз, когда клетка доводится на экране, это alphaMark условно скрыт на основе ячеек выбирают:

cell.alphaMark.hidden = cell.selected 
+0

Большое спасибо, это сработало! – Maha