2017-11-25 1 views
0

Ich weiß nicht, wie das Problem zu lösen: Es gibt eine Datenbank mit Feldern ist:eine Spalte in Realm auswählen und auf die Links klicken durch

import Foundation 
import RealmSwift 
import UIKit 

class EventsDB: Object { 
@objc dynamic var dataMonth = "" 
@objc dynamic var dataDay = "" 
@objc dynamic var desc = "" 
@objc dynamic var link = "" 

} 

Der Link Spalte enthält Links zu einigen Veranstaltungen. Die SecondController Klasse hat eine showTutorial Funktion:

import Foundation 
import UIKit 
import RealmSwift 
import SafariServices 

class SecondController: UIViewController, UITableViewDelegate { 

@IBOutlet weak var tableView: UITableView! 
var linkGive: String? 
var dayForSearch: String? 
var monthForSearch: String? { 
    didSet { 
     guard let monthForSearch = self.monthForSearch else { 
      return 
     } 

     self.realevents = (try! Realm()).objects(EventsDB.self).filter("dataMonth = '\(monthForSearch)' && dataDay = '\(dayForSearch ?? "0")") 
    } 
} 

func showTutorial(_ which: Int) { 
    if let url = URL(string: "\((try! Realm()).objects(EventsDB.self).filter("link"))") { 
     let config = SFSafariViewController.Configuration() 
     config.entersReaderIfAvailable = true 

     let vc = SFSafariViewController(url: url, configuration: config) 
     present(vc, animated: true) 
    } 
} 

override func viewDidLoad() { 
super.viewDidLoad() 
} 

var realevents: Results<EventsDB>? 
} 

extension SecondController: UITableViewDataSource{ 
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    showTutorial(indexPath.row) 
} 
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return realevents?.count ?? 0 
} 
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell") 
     else { 
      return UITableViewCell() 
    } 
    let realevent = realevents?[indexPath.row] 
    cell.textLabel?.text = realevent?.desc 

    return cell 
} 
} 

F: Wie kann ich den Link Spalte auswählen und die Anwendung auf die Links in dieser Spalte öffnen machen? (Was soll ich in die URL (in der showTutorial-Funktion) eingeben?)

Antwort

0

Sie haben bereits das Objekt mit der Verknüpfung in Ihrem Ergebnis-Array, also alles, was Sie tun müssen, ist das Objekt aus dem Array zu lesen und seine Verknüpfung zu erhalten , wandeln Sie es in eine URL um und retten Sie es, falls dies nicht gelingt.

func showTutorial(_ index: Int) { 
    guard let url = realevents?[index].link.flatMap { URL(string: $0)} else { 
     return 
    } 
    let config = SFSafariViewController.Configuration() 
    config.entersReaderIfAvailable = true 
    let vc = SFSafariViewController(url: url, configuration: config) 
    present(vc, animated: true) 
    } 
} 
Verwandte Themen