У меня есть UITableViewController с UITableView (конечно), и мой вопрос заключается в том, как обновлять данные в tableView во время выполнения?tableView reloadData cellForRowAtIndexPath не называется
Потому что, когда я вызываю reloadData в viewWillAppear, он отлично работает, но позже в коде ничего не делает.
Количество строк метод вызывается и возвращает ненулевое число, но cellForRowAtIndexPath не называется так таблица не обновляется ...
class CropTableViewController: UITableViewController {
var photos = [Photo]()
var photoAssets = [PHAsset]()
override func viewDidLoad() {
super.viewDidLoad()
self.automaticallyAdjustsScrollViewInsets = false
}
override func viewWillAppear(animated: Bool) {
refreshData()
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
print("rows called: \(photos.count)") // prints non-zero
return photos.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
print("cell called")
let cellIdentifier = "Cell"
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! CropTableViewCell
let photo = photos[indexPath.row]
cell.photoImageView.image = photo.photo
return cell
}
func refreshData(){
if (loadPhotos() != nil){
photos = loadPhotos()!
tableView.reloadData()
}
print("refreshData called \(photos.count)")
}
}
EDIT:
loadPhotos просто загрузки изображений с айфона память:
func loadPhotos() -> [Photo]? {
return NSKeyedUnarchiver.unarchiveObjectWithFile(Photo.ArchiveURL.path!) as? [Photo]
}
RefreshData вызывается из другого класса в этом цикле:
for asset in photoAssets {
let manager: PHImageManager = PHImageManager.defaultManager()
let scale: CGFloat = UIScreen.mainScreen().scale
let targetSize: CGSize = CGSizeMake(300.0 * scale, 180.0 * scale)
manager.requestImageForAsset(asset, targetSize: targetSize, contentMode: .AspectFill, options: self.requestOptions, resultHandler: {(image, info) -> Void in
let photo = Photo(photo: image!)
self.photos.append(photo!)
print("photos count \(self.photos.count)")
self.savePhotos()
CropTableViewController().refreshData()
})
}
http://stackoverflow.com/questions/7712325/cellforrowatindexpath-not-called – hasan83
Что делает 'loadPhotos'do? Это асинхронно? Ваш код в 'refreshData' должен получить значение' loadPhotos() 'и проверить, что для non-nil вместо вызова функции дважды. Можете ли вы показать, как вы вызываете 'refreshData' позже в коде? – Paulw11
Я отредактировал вопрос. –