Я создал инструмент постраничной из панели инструментов, снимающей этот метод:.reloadData() и .setNeedsDisplay() игнорируются
func nextPage(sender: UIBarButtonItem) {
let currentChapter = page.valueForKey("chapter") as! Int
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext
let fetchRequest = NSFetchRequest(entityName: "Page")
fetchRequest.predicate = NSPredicate(format: "(chapter = %d)", currentChapter + 1)
do {
let result = try managedContext.executeFetchRequest(fetchRequest)
// It is here, I can clearly see we have the old object.
self.page = result[0] as! NSManagedObject
// And here I can clearly see that a new object was set.
self.tableView.reloadData()
self.view.setNeedsDisplay()
} catch {
let fetchError = error as NSError
print(fetchError)
}
}
Этот метод находится в моем UIViewController, который настроен следующим образом:
import UIKit
import CoreData
class PageViewController: UIViewController, UITableViewDelegate, UINavigationBarDelegate, UITableViewDataSource {
// Mark: Properties
var page: NSManagedObject!
var tableView = UITableView()
var toolBar = UIToolbar()
override func viewDidLoad() {
super.viewDidLoad()
tableView.frame = CGRectMake(0, 0, view.frame.width, view.frame.height - 50)
tableView.estimatedRowHeight = 200
tableView.rowHeight = UITableViewAutomaticDimension
tableView.scrollEnabled = true
tableView.userInteractionEnabled = true
tableView.delegate = self
tableView.dataSource = self
tableView.tableHeaderView = containerView
self.view.addSubview(tableView)
Любые идеи, почему мой tableView
не перезагружает свои новые данные?
Update
В соответствии с рекомендациями @Koder и @Simon, я обновил свой код, так что .. но интерфейс еще не обновляли: рекомендации
func nextPage(sender: UIBarButtonItem) {
let currentChapter = page.valueForKey("chapter") as! Int
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext
let fetchRequest = NSFetchRequest(entityName: "Page")
fetchRequest.predicate = NSPredicate(format: "(chapter = %d)", currentChapter + 1)
do {
let result = try managedContext.executeFetchRequest(fetchRequest)
self.page = result[0] as! NSManagedObject
dispatch_async(dispatch_get_main_queue()) {
self.tableView.reloadData()
self.view.setNeedsDisplay()
}
} catch {
let fetchError = error as NSError
print(fetchError)
}
}
Per LucaD, в Я также включу свои numberOfRows
и numberOfSections
:
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.total
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
Что значит «не перезагружать свои новые данные». Модель такая же или, даже если модель не то же самое, методы источника данных не называются? –
@LucaD Я имею в виду, что пользовательский интерфейс не обновляется новым контентом. Атрибут 'page' определенно установлен для новых данных. И эти два метода называются, но пользовательский интерфейс остается неизменным. – Trip
Вызывается методы 'numberOfRowsInSection' и' numberOfSection'? –