领域数组索引超出范围

时间:2017-04-11 10:03:34

标签: ios swift uitableview nsarray realm

我目前正在我的应用程序中开发书签功能。此功能的流程来自新闻列表屏幕,用户选择阅读新闻,然后在WebView中将包含书签按钮。按下书签按钮后,新闻将存储在Realm中,然后显示在Bookmark ViewController中。但是,当我推入BookmarkVc时,应用程序因以下异常而崩溃:

enter image description here

我认为问题来自ArticleList,即使我添加了更多,它总是只包含1个元素。因此,它导致指数超出范围问题:

enter image description here

这是我的webViewVC代码和书签按钮操作:

import UIKit
import Realm
import RealmSwift

class WebViewVC: UIViewController {

@IBOutlet weak var webView: UIWebView!
var ulr:String?
let articleList = ArticleList()
var article:NewsArticle?
var list : Results<ArticleList>!
var searchBar:UISearchBar = UISearchBar(frame: CGRect(x: 0, y: 0, width: 
250, height: 20))

func drawNavBarUI(navigationItem:UINavigationItem) {
 let bookmarkBtn = UIButton(type: .custom)
 bookmarkBtn.setImage(UIImage(named: "bookmark"), for: .normal)
 bookmarkBtn.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
 let item1 = UIBarButtonItem(image: #imageLiteral(resourceName: "favortie"), style: .done, target: self, action: #selector(saveFavoriteArticle))
    navigationItem.setRightBarButtonItems([item1,UIBarButtonItem(customView:searchBar)], animated: true)
}

func saveFavoriteArticle() {
    articleList.articles.append(article!)
    try! realm.write {
        realm.add(articleList)
    }
    print(articleList)
}

override func viewDidLoad() {
    super.viewDidLoad()
    webView.loadHTMLString(ulr!, baseURL: nil)
    drawNavBarUI(navigationItem: self.navigationItem)
}

对于BookmarkVC:

import UIKit
import RealmSwift

class BookmarksVC: UIViewController,UITableViewDelegate,UITableViewDataSource {

var list : Results<ArticleList> {
    get {
        return realm.objects(ArticleList.self)
    }
}

@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
    super.viewDidLoad()
    tableView.register(UINib(nibName: "BookmarkCell", bundle: nil), forCellReuseIdentifier: "bookmarkCell")
    tableView.delegate = self
    tableView.dataSource = self
    self.tableView.reloadData()
}


func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
    return list.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
    let dict = list[indexPath.row]
    let cell = tableView.dequeueReusableCell(withIdentifier: "bookmarkCell", for: indexPath) as! BookmarkCell
    cell.titleLabel.text = dict.articles[indexPath.row].title
    return cell

}

这是我第一次使用Realm并尝试了一段时间来弄清楚,但它仍然没有用。所以,任何人都可以帮我解决它。非常感谢你。

1 个答案:

答案 0 :(得分:0)

当您下标获取其dict.articles对象时,indexPath.row列表看起来是空的。