我有一个实现TableViewController
和UITableViewController
协议的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)"
}
}