2017-11-25 1 views
0

링크를 클릭 :영역의 열을 선택하고 내가 문제를 해결하는 방법을 모른다

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 = "" 

} 

링크 열이 일부 이벤트에 대한 링크가 포함되어 필드가있는 데이터베이스가 있습니다. 내가 링크 열을 선택하고 응용 프로그램이이 열에서 링크를 열 어떻게해야합니까 :

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

질문 : SecondController 클래스는 showTutorial 기능을 가지고있다? (URL에 무엇을 입력해야합니까? (showTutorial 함수에서)

답변

0

결과 배열에 링크가있는 객체가 이미 있으므로 배열에서 객체를 읽고 링크를 가져 오기 만하면됩니다 그런 다음이 URL을 URL로 변환하고이 중 하나라도 실패하면 복구 할 수 있습니다.

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) 
    } 
} 
관련 문제