Ios 线程1:使用幻灯片刷新时发出信号SIGABRT错误

Ios 线程1:使用幻灯片刷新时发出信号SIGABRT错误,ios,xcode,swift,tableview,pull-to-refresh,Ios,Xcode,Swift,Tableview,Pull To Refresh,我正在尝试将幻灯片刷新功能添加到我的应用程序表中。我目前正在关注YouTube上找到的指南,我的应用程序在初始化幻灯片刷新时出现SIGABRT错误,导致崩溃 我的代码: // outlet - table view @IBOutlet weak var myTableView: UITableView! // outet - activity indicator @IBOutlet weak var spinner: UIActivityIndicatorView! // outlet

我正在尝试将幻灯片刷新功能添加到我的应用程序表中。我目前正在关注YouTube上找到的指南,我的应用程序在初始化幻灯片刷新时出现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
放在你想放的任何地方。代码中事物的位置是有意义的。学得快。了解它是如何工作的

同时,我会告诉你这个问题的答案。更改此结构:

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

很好,但你忽略了一个事实,即他将其
func
编写为本地而不是方法。@matt感谢您的更新,因为您的答案涵盖了所有他可以从您的答案中获得正确答案的内容。我还是对您的答案进行了投票。你为此做出了很大贡献!在我继续之前,我很可能会了解这一点。感谢您的输入,但更改后没有效果,更改后我的RSS源没有加载,要刷新的幻灯片也没有了。您是否将其他内容与代码相同?只需从“viewDidLoad”中删除函数并将其放置outside@matt在阅读您的编辑后,不再有任何错误。今晚做完后,我肯定会更新。现在唯一的事情是旋转器不会停止。是因为RSS源没有响应,还是我需要在swift文件中执行某些操作才能在刷新源后停止?@GabeZimbric UIRefreshControl有两种方法可用于启动/停止加载指示器“-beginRefreshing-endRefreshing”,这可能会有帮助you@Pyro通过将
self.refreshControl.endRefreshing()
添加到
func-uiRefreshControlAction()
谢谢!