线程 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()
}