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
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:
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.
scheinen, wie Sie es falsch gemacht haben auf Ihrer 'cellForRow', druckt' Liste [indexPath.row] 'und' dict.articles [indexPath.row] 'sehen, ob es etwas – Tj3n
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. –
Anzahl der Protokolllisten in der numberOfRowsInSection-Methode. https://github.com/realm/realm-cocoa/issues/4248 –