2017-04-11 2 views
0

Im Moment entwickle ich eine Lesezeichenfunktion in meiner App. Der Ablauf dieser Funktion wird vom Bildschirm der Nachrichtenliste angezeigt, der Benutzer wählt Nachrichten zu lesen, und dann im WebView wird eine Schaltfläche Lesezeichen enthalten. Nachdem die Lesezeichentaste gedrückt wurde, werden die Nachrichten in Realm gespeichert und dann in Bookmark ViewController angezeigt. Allerdings, wenn ich in die BookmarkVc geschoben, stürzte App mit folgenden Ausnahme:Realm Array Index außerhalb des Bereichs

enter image description here

Ich denke, das Problem aus der Artikelliste kommen, wenn es immer nur ein Element enthält, auch wenn ich mehr hinzugefügt. So führt es zu dem Index Problem außerhalb des Bereichs:

enter image description here

Hier ist mein Code für webViewVC und Lesezeichen Button-Aktion:

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

Und für die 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 

} 

Dies ist das erste Mal, dass ich Realm benutze und versuche es eine ganze Zeit lang herauszufinden, aber es funktioniert immer noch nicht. Also bitte, jeder kann mir helfen, es zu lösen. Vielen Dank.

+0

scheinen, wie Sie es falsch gemacht haben auf Ihrer 'cellForRow', druckt' Liste [indexPath.row] 'und' dict.articles [indexPath.row] 'sehen, ob es etwas – Tj3n

+0

App vor der Ansicht abgestürzt haben scheint, aber ich Das Problem könnte aus dem ArticleList-Objekt stammen, sein Array enthält immer nur 1 Element. –

+0

Anzahl der Protokolllisten in der numberOfRowsInSection-Methode. https://github.com/realm/realm-cocoa/issues/4248 –

Antwort

0

Sieht aus wie die dict.articles Liste ist leer, wenn Sie tiefstellen, um seine indexPath.row 's Objekt zu erhalten.

Verwandte Themen