> The current version of my code seems to satisfy points #1-3, but crashes
> when attempting to deal with #4 - and I’m not sure that what I’ve done
> is “good” or “correct” in terms of satisfying the first three points.

I haven't looked at all of your code, but one thing that could definitely cause problems is that you're calling `dequeueReusableCellWithIdentifier` from `tableView(_:didDeselectRowAtIndexPath:)` and `tableView(_:didSelectRowAtIndexPath`). Don't do that.

`dequeueReusableCellWithIdentifier` creates a new cell (or fetches an unused one from the table view's reuse pool). You should only ever call it from inside `tableView(_:cellForRowAtIndexPath:)`.

In `didSelectRow...` and `didDeselectRow...`, you want to ask the table view for the _existing_ cell at the specified index path. Do this with something like:

    if let cell = tableView.cellForRowAtIndexPath(indexPath) {
        // cell found, do something with it
        ...
    } else {
        // No cell exists at this index path.
        // This probably doesn't happen in these callbacks,
        // but you never know.
    }

Note that while `tableView.cellForRowAtIndexPath(indexPath)` looks very much like the data source method you implemented above, it is a different method. This one is a method on `UITableView`, not `UITableViewDataSource`.

Hope this helps,
Ole

_______________________________________________
swift-users mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to