このメソッドでブロック内のテーブルデータを再読み込みしたい:
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
}
しかし、elseブロックは実行されません。私が得るエラーは:
'performSelectorOnMainThread' is unavailable: 'performSelector' methods are unavailable
では、'performSelectorOnMainThread'
に代わるものは何ですか?
更新:
現在、アボートエラーが発生しています。
この単純なC関数:
dispatch_async(dispatch_get_main_queue(), {
// DO SOMETHING ON THE MAINTHREAD
self.tableView.reloadData()
})
関数を起動するのはどうですか?
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
loadAlbums()
})
viewDidLoad()?
Swift
DispatchQueue.main.async(execute:
{
//Code to execute on main thread
})
PerformSelectorのバリエーションの代わりにGCDを使用します。
dispatch_async(dispatch_get_main_queue()) {
() -> Void in
self.doSomething()
}
UITableViewのオブジェクトではなくUIViewControllerでperformSelectorOnMainThreadを呼び出している
あなたのコードかもしれません:
self.performSelectorOnMainThread(Selector(reloadData), withObject: self.tblMainTable, waitUntilDone: true)
の代わりに:
self.tblMainTable.performSelectorOnMainThread(Selector("reloadData"), withObject: nil, waitUntilDone: true)
uIViewControllerには「performSelectorOnMainThread」という名前のメソッドがないため、このメッセージが表示されます
// Xcode 8.2 // Swift 3.0
任意の都市の名前または郵便番号を送信した後、天気に関するデータ(「気温」、「湿度」、「気圧」など)を提供するAPIにアクセスしています。したがって、そのデータはUIに表示される必要があります(メインスレッドにある必要があります)UI(the tableView)
self.performSelector(onMainThread: #selector(Home.DataOnUI), with: nil, waitUntilDone: true)
//
func DataOnUI() {
self.tblView.reloadData()
}
追伸ホームはUIViewControllerのクラスです