选定的行'自发'重置为FetchedResultsController中的默认值

时间:2017-02-26 00:52:38

标签: ios swift nsfetchedresultscontroller

我有一个实现TableViewControllerUITableViewController协议的NSFetchedResultsController类。

在选择row时,该应用程序将设计为细分到详细信息屏幕。但是,当我首先选择除{1}之外的任何row时,cell中的数据会更改为显示情节提要中定义的默认值。

据我所知,我的应用程序中没有代码可以执行此操作。当我在调试模式中逐步执行代码时,我无法发现在选择row时触发的任何代码。

因此,我不确定应用程序代码的哪些部分包含在内,以帮助确定可能发生的情况。

关于我从哪里开始的任何建议都会受到重视。

编辑----

我被要求发布我的代码。由于我不知道触发了哪个代码,因此这里是TVC的类定义,它实现了 UITableViewController NSFetchedResultsControllerDelegate 协议。我只包括整体类定义,类属性和两个方法 initializeFetchedResultsController ConfigureCell

我不知道这个有限的代码示例是否足够,因为当用户在运行时触摸该行时,我无法确定调用的内容。

如果有任何想法,我很乐意加入更多。

class PlayerTableViewController: UITableViewController, NSFetchedResultsControllerDelegate {

var players: [NSManagedObject] = []

var fetchedResultsController: NSFetchedResultsController<NSFetchRequestResult>!

var managedObjectContext: NSManagedObjectContext? = (UIApplication.shared.delegate as? AppDelegate)?.managedObjectContext

func initializeFetchedResultsController() {
    guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
        return
    }

    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Golfer")
    let firstNameSort = NSSortDescriptor(key: "firstName", ascending: true)
    let lastNameSort = NSSortDescriptor(key: "lastName", ascending: true)
    request.sortDescriptors = [firstNameSort, lastNameSort]

    let moc = appDelegate.managedObjectContext
    fetchedResultsController = NSFetchedResultsController(fetchRequest: request, managedObjectContext: moc, sectionNameKeyPath: "firstName", cacheName: nil)
    fetchedResultsController.delegate = self

    do {
        try fetchedResultsController.performFetch()
    } catch {
        fatalError("Failed to initialize FetchedResultsController: \(error)")
    }
}

func configureCell(cell: UITableViewCell, indexPath: NSIndexPath) {
    var handicap: Float

    let cellIdentifier = "PlayerTableViewCell"

    guard let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath as IndexPath) as? PlayerTableViewCell else {
            fatalError("The dequeued cell is not an instance of PlayerTableViewCell")
        }

    // Populate cell from the NSManagedObject instance
    guard let player = fetchedResultsController.object(at: indexPath as IndexPath) as? Golfer else {
        fatalError("Unexpected Object in FetchedResultsController")
    }

    let firstName = player.value(forKey: "firstName") as! String?
    let lastName = player.value(forKey: "lastName") as! String?
    let fullName = firstName! + " " + lastName!
    handicap = player.value(forKey: "exactHandicap") as! Float

    cell.playerFullName?.text = fullName

    cell.playerPhoto.image = UIImage(data: player.value(forKey: "photo") as! Data)

    cell.numExactHandicap.text = "\(Int(handicap))"
    cell.numStrokesReceived.text = "\(handicap.cleanValue)"
}

}

0 个答案:

没有答案