V
V
Volodymyr Lavryk2017-04-20 19:33:41
iOS
Volodymyr Lavryk, 2017-04-20 19:33:41

How to make a search history (details inside)?

Hello,
there are two views: the first one is for searching by title, the second - displays the result with a poster and info about the movie.
The third controller is a TablView where films that have already been searched should be displayed and when you tap on a movie from the list, go to the screen with its info. (second controller)
I tried to create an array of elements inside the Movie model, but when adding a new element, it was overwritten.
Can I somehow tie Realm here?

import Foundation
import UIKit
import Alamofire
import AlamofireImage


protocol MovieDelegate {
    func updateMovieInfo()
}

class Movie {
   private let omdbUrl = "http://www.omdbapi.com/?"
    var title: String?
    var filmYear: String?
    var poster: String?

   var delegete: MovieDelegate!

    var historyMovie = [Movie]()



    func getMovieInfo(title: String, completion: @escaping ()->()){
        let params = ["t": title]
        Alamofire.request(omdbUrl, method: .get, parameters: params).validate(statusCode: 200..<300).validate(contentType: ["application/json"]).responseJSON { (response) in
            switch response.result {
            case .success(let JSON):
                let response = JSON as! NSDictionary
                let status = response["Response"] as! String
                if status == "True" {
                    self.title = (response["Title"] as! String)
                    self.filmYear = (response["Year"] as! String)
                    self.poster = (response["Year"] as! String)
                  //  self.delegete.updateMovieInfo()
                    completion()
                } else {
                    self.title = (response["Error"] as! String)
                    completion()
                }
            case .failure(let error):
                print (error)

            }
        }
        
    }

}

//
//  SearchFilmInfo.swift
//  OMDb Picker
//
//  Created by Volodymyr Lavryk on 18.04.17.
//  Copyright © 2017 Volodymyr Lavryk. All rights reserved.
//

import Foundation
import UIKit
import Alamofire
import AlamofireImage


protocol MovieDelegate {
    func updateMovieInfo()
}

class Movie {
   private let omdbUrl = "http://www.omdbapi.com/?"
    var title: String?
    var filmYear: String?
    var poster: String?

   var delegete: MovieDelegate!

    var historyMovie = [Movie]()



    func getMovieInfo(title: String, completion: @escaping ()->()){
        let params = ["t": title]
        Alamofire.request(omdbUrl, method: .get, parameters: params).validate(statusCode: 200..<300).validate(contentType: ["application/json"]).responseJSON { (response) in
            switch response.result {
            case .success(let JSON):
                let response = JSON as! NSDictionary
                let status = response["Response"] as! String
                if status == "True" {
                    self.title = (response["Title"] as! String)
                    self.filmYear = (response["Year"] as! String)
                    self.poster = (response["Year"] as! String)
                  //  self.delegete.updateMovieInfo()
                    completion()
                } else {
                    self.title = (response["Error"] as! String)
                    completion()
                }
            case .failure(let error):
                print (error)

            }
        }
        
    }

}

import UIKit

class DetailInfoViewController: UIViewController, MovieDelegate {

    @IBAction func showHistory(_ sender: UIButton) {
        performSegue(withIdentifier: "showHistory", sender: self)
    }
    @IBOutlet weak var posterImageView: UIImageView!
    @IBOutlet weak var filmNameLabel: UILabel!
    @IBOutlet weak var filmYearLabel: UILabel!
    var movie = Movie()
    var movieTitle = ""

    override func viewDidLoad() {
        super.viewDidLoad()
        self.movie.getMovieInfo(title: movieTitle ) {
            self.updateMovieInfo()
        }
        self.movie.delegete = self
    }

    func updateMovieInfo() {
        getPoster(link: movie.poster)
        filmNameLabel.text = movie.title
        filmYearLabel.text = movie.filmYear
    }

    func getPoster(link: String?) {
        if link != nil {
            guard let url = URL(string: link!) else { return }
            DispatchQueue.global().async {
                if let data = try? Data(contentsOf: url) {
                    DispatchQueue.main.async {
                        self.posterImageView.image = UIImage(data: data)
                    }
                }
            }        } else {
            self.posterImageView.image = #imageLiteral(resourceName: "Image")
        }
        
    }
}

Answer the question

In order to leave comments, you need to log in

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question