线程 1:使用滑动刷新时发出信号 SIGABRT 错误
thread 1: signal SIGABRT error when using slide to refresh
我正在尝试将幻灯片刷新功能添加到我的应用 table。我目前正在按照 YouTube 上的指南进行操作 here,但我的应用在初始化要刷新的幻灯片时因 SIGABRT 错误而崩溃。
我的代码:
// outlet - table view
@IBOutlet weak var myTableView: UITableView!
// outet - activity indicator
@IBOutlet weak var spinner: UIActivityIndicatorView!
// outlet - barbutton
@IBOutlet weak var menuButton: UIBarButtonItem!
// slide to refresh
let refreshControl: UIRefreshControl = UIRefreshControl()
// xml parser
var myParser: NSXMLParser = NSXMLParser()
// rss records
var rssRecordList : [RssRecord] = [RssRecord]()
var rssRecord : RssRecord?
var isTagFound = [ "item": false , "title":false, "pubDate": false ,"link":false]
// MARK - View functions
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
if self.revealViewController() != nil {
menuButton.target = self.revealViewController()
menuButton.action = "revealToggle:"
self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
}
// pull to refresh
refreshControl.addTarget(self, action: "uiRefreshControlAction:", forControlEvents: UIControlEvents.ValueChanged)
self.myTableView.addSubview(refreshControl);
func uiRefreshControlAction() {
self.myTableView.reloadData()
}
// set tableview delegate
self.myTableView.dataSource = self
self.myTableView.delegate = self
}
如果有人能告诉我我做错了什么,那就太好了。我是 Xcode 的新手,这是我的第一个应用程序,所以如果我做错了什么,我深表歉意。
您不能随心所欲地放置 func uiRefreshControlAction
。代码中事物的位置具有 含义 。学习Swift。了解它是如何工作的。
同时,我只告诉你这个问题的答案。更改此结构:
override func viewDidLoad() {
super.viewDidLoad()
// ...
func uiRefreshControlAction() {
self.myTableView.reloadData()
}
// ...
}
为此:
override func viewDidLoad() {
super.viewDidLoad()
// ...
}
func uiRefreshControlAction() {
self.myTableView.reloadData()
}
然后改变这个:
action: "uiRefreshControlAction:"
对此:
action: "uiRefreshControlAction"
最后,更新到Xcode 7.3,这样你就不可能再犯这种错误了!
在你的代码中你写了
// pull to refresh
refreshControl.addTarget(self, action: "uiRefreshControlAction:", forControlEvents: UIControlEvents.ValueChanged)
self.myTableView.addSubview(refreshControl);
将其更改为
// pull to refresh
refreshControl.addTarget(self, action: "uiRefreshControlAction", forControlEvents: UIControlEvents.ValueChanged)
self.myTableView.addSubview(refreshControl);
因为您没有在该函数中传递任何参数,但您在操作名称中添加了“:”,这表明您将在函数中包含参数
所以你的全新代码将是这样的
// MARK - View functions
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
if self.revealViewController() != nil {
menuButton.target = self.revealViewController()
menuButton.action = "revealToggle:"
self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
}
// pull to refresh
refreshControl.addTarget(self, action: "uiRefreshControlAction", forControlEvents: UIControlEvents.ValueChanged)
self.myTableView.addSubview(refreshControl);
// set tableview delegate
self.myTableView.dataSource = self
self.myTableView.delegate = self
}
func uiRefreshControlAction() {
self.myTableView.reloadData()
}
我正在尝试将幻灯片刷新功能添加到我的应用 table。我目前正在按照 YouTube 上的指南进行操作 here,但我的应用在初始化要刷新的幻灯片时因 SIGABRT 错误而崩溃。
我的代码:
// outlet - table view
@IBOutlet weak var myTableView: UITableView!
// outet - activity indicator
@IBOutlet weak var spinner: UIActivityIndicatorView!
// outlet - barbutton
@IBOutlet weak var menuButton: UIBarButtonItem!
// slide to refresh
let refreshControl: UIRefreshControl = UIRefreshControl()
// xml parser
var myParser: NSXMLParser = NSXMLParser()
// rss records
var rssRecordList : [RssRecord] = [RssRecord]()
var rssRecord : RssRecord?
var isTagFound = [ "item": false , "title":false, "pubDate": false ,"link":false]
// MARK - View functions
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
if self.revealViewController() != nil {
menuButton.target = self.revealViewController()
menuButton.action = "revealToggle:"
self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
}
// pull to refresh
refreshControl.addTarget(self, action: "uiRefreshControlAction:", forControlEvents: UIControlEvents.ValueChanged)
self.myTableView.addSubview(refreshControl);
func uiRefreshControlAction() {
self.myTableView.reloadData()
}
// set tableview delegate
self.myTableView.dataSource = self
self.myTableView.delegate = self
}
如果有人能告诉我我做错了什么,那就太好了。我是 Xcode 的新手,这是我的第一个应用程序,所以如果我做错了什么,我深表歉意。
您不能随心所欲地放置 func uiRefreshControlAction
。代码中事物的位置具有 含义 。学习Swift。了解它是如何工作的。
同时,我只告诉你这个问题的答案。更改此结构:
override func viewDidLoad() {
super.viewDidLoad()
// ...
func uiRefreshControlAction() {
self.myTableView.reloadData()
}
// ...
}
为此:
override func viewDidLoad() {
super.viewDidLoad()
// ...
}
func uiRefreshControlAction() {
self.myTableView.reloadData()
}
然后改变这个:
action: "uiRefreshControlAction:"
对此:
action: "uiRefreshControlAction"
最后,更新到Xcode 7.3,这样你就不可能再犯这种错误了!
在你的代码中你写了
// pull to refresh
refreshControl.addTarget(self, action: "uiRefreshControlAction:", forControlEvents: UIControlEvents.ValueChanged)
self.myTableView.addSubview(refreshControl);
将其更改为
// pull to refresh
refreshControl.addTarget(self, action: "uiRefreshControlAction", forControlEvents: UIControlEvents.ValueChanged)
self.myTableView.addSubview(refreshControl);
因为您没有在该函数中传递任何参数,但您在操作名称中添加了“:”,这表明您将在函数中包含参数
所以你的全新代码将是这样的
// MARK - View functions
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
if self.revealViewController() != nil {
menuButton.target = self.revealViewController()
menuButton.action = "revealToggle:"
self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
}
// pull to refresh
refreshControl.addTarget(self, action: "uiRefreshControlAction", forControlEvents: UIControlEvents.ValueChanged)
self.myTableView.addSubview(refreshControl);
// set tableview delegate
self.myTableView.dataSource = self
self.myTableView.delegate = self
}
func uiRefreshControlAction() {
self.myTableView.reloadData()
}