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

时间:2016-03-23 03:08:34

标签: ios xcode swift tableview pull-to-refresh

我正在尝试将幻灯片添加到我应用的表格中。我目前正在关注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的新手,这是我的第一个应用程序,所以如果我做了一件非常抱歉的事情。

2 个答案:

答案 0 :(得分:1)

在您编写的代码中

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

答案 1 :(得分:0)

你不能只把config.xml放在你想要的任何地方。代码中的位置具有含义。学习斯威夫特。了解它的工作原理。

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

func uiRefreshControlAction

对此:

override func viewDidLoad() {
    super.viewDidLoad()
    // ...
    func uiRefreshControlAction() {
        self.myTableView.reloadData()
    }
    // ...
}

然后改变这个:

override func viewDidLoad() {
    super.viewDidLoad()
    // ...
}
func uiRefreshControlAction() {
    self.myTableView.reloadData()
}

到此:

action: "uiRefreshControlAction:"

最后,更新到Xcode 7.3,你不可能犯这种错误!