Je veux recharger mes données de table à l'intérieur d'un bloc dans cette méthode:
import UIKit
import AssetsLibrary
class AlbumsTableViewController: UITableViewController {
var albums:ALAssetsGroup[] = []
func loadAlbums(){
let library = IAAssetsLibraryDefaultInstance
library.enumerateGroupsWithTypes(ALAssetsGroupType(ALAssetsGroupAll),
usingBlock: {(group, stop) in
if group {
self.albums.append(group)
}
else {
dispatch_async(dispatch_get_main_queue(), {
self.tableView.reloadData()
})
}
}, failureBlock: { (error:NSError!) in println("Problem loading albums: \(error)") })
}
override func viewDidLoad() {
super.viewDidLoad()
loadAlbums()
// Uncomment the following line to preserve selection between presentations
// self.clearsSelectionOnViewWillAppear = false
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
//self.navigationItem.rightBarButtonItem = self.editButtonItem
}
Mais le bloc else ne sera pas exécuté. L'erreur que je reçois est:
'performSelectorOnMainThread' is unavailable: 'performSelector' methods are unavailable
Alors, quelle est l'alternative à 'performSelectorOnMainThread'
dans swift?
METTRE À JOUR:
Je reçois maintenant une erreur d'abandon.
Cette simple fonction C:
dispatch_async(dispatch_get_main_queue(), {
// DO SOMETHING ON THE MAINTHREAD
self.tableView.reloadData()
})
Qu'en est-il du lancement de votre fonction avec:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
loadAlbums()
})
dans viewDidLoad ()?
Swift 3
DispatchQueue.main.async(execute:
{
//Code to execute on main thread
})
Utilisez GCD au lieu des variations performSelector.
dispatch_async(dispatch_get_main_queue()) {
() -> Void in
self.doSomething()
}
Vous appelez performSelectorOnMainThread sur UIViewController au lieu de l'objet UITableView
Peut-être votre code:
self.performSelectorOnMainThread(Selector(reloadData), withObject: self.tblMainTable, waitUntilDone: true)
Au lieu de:
self.tblMainTable.performSelectorOnMainThread(Selector("reloadData"), withObject: nil, waitUntilDone: true)
vous recevez ce message car UIViewController n'a aucune méthode nommée "performSelectorOnMainThread"