2016-03-24 4 views
-2
import UIKit 
import Alamofire 

protocol VideoModelDelegate{ 
func dataReady() 
} 

class VideoModel: NSObject { 

let API_KEY = "" 
let UPLOADS_PLAYLIST_ID = "" 


var videoArray = [Video]() 

var delegate:VideoModelDelegate? 

func getFeedVideos() -> [Video] { 

     Alamofire.request(.GET, "",parameters: ["part":"snippet",   "playlistId":UPLOADS_PLAYLIST_ID ,"key":API_KEY], 
encoding: ParameterEncoding.URL, headers: nil).responseJSON {(response) -> Void in 

     if let JSON = response.result.value{ 

      var arrayOfVideos = [Video]() 

      for video in JSON["items"] as! NSArray { 
       print(video) 
       let videoObj = Video() 
     videoObj.videoId = video.valueForKeyPath("snippet,resourceId,  videoId") 
       String 
     videoObj.videoTitle = video.valueForKeyPath("snippet.title") as! String 
     videoObj.videoDescription = video.valueForKeyPath("snippet.description") as! 
       String 
       videoObj.videoThumbnailUrl = video.valueForKeyPath("snippet.thumbnails.maxres.url") as! String 
       arrayOfVideos.append(videoObj) 
     } 

      self.videoArray = arrayOfVideos 

      if self.delegate != nil { 
       self.delegate!.dataReady() 

      } 

     } 
    } 
     } 
    func getVideos() -> [Video] { 
    var videos = [Video]() 

    let video1 = Video() 

    video1.videoId = "" 
    video1.videoTitle = "" 

    videos.append(video1) 

    return videos 

} 

}viewcontroller соответствует протоколу «UITableViewDataSource, Video Mode Delegate»?

[Дополнительные ошибки] [Ошибка] 1 Как сделать мой ViewController соответствовать протоколу "UITableViewDataSource и ВИДЕОРЕЖИМЕ делегат"?

Я пробовал ряд предлагаемых изменений в предыдущих потоках, но ничего не дошло, пожалуйста, помогите мне.

Заранее спасибо

import UIKit 
import Alamofire 

Вкладка Класс: UIViewController, UITableViewDataSource, UITableViewDelegate, VideoModelDelegate error- Type 'Вкладка' не соответствует протоколу 'UITableViewDataSource'

{

@IBOutlet weak var table: UITableView! 

@IBOutlet weak var name: UILabel! 

    var videos : [Video] = [Video]() 
var selectedVideo:Video? 
let model:VideoModel = VideoModel() 
var arrRes = [[String:AnyObject]]() //Array of dictionary 


override func viewDidLoad() { 
    super.viewDidLoad() 


    self.model.delegate = self 
    //self.videos = model.getVideos() 

    model.getFeedVideos() 


    self.table.dataSource = self 
    self.table.delegate = self 


    /*Alamofire.request(.GET, "http://online.m-tutor.com/mtutor/gateway/mtutorAPI_1.php?type=university").response { (req, res, data, error) -> Void in 
     print(res) 
     let outputString = NSString(data: data!, encoding:NSUTF8StringEncoding) 
     print(outputString) 
    } 


    Alamofire.request(.GET, "http://online.m-tutor.com/mtutor/gateway/mtutorAPI_1.php?type=university").responseJSON { response in 
     if let swiftyJsonVar = response.data 
     { 

     print("swiftyJsonvar:\(swiftyJsonVar)") 
     } 
    }*/ 



    Alamofire.request(.GET, "http://online.m-tutor.com/mtutor/gateway/mtutorAPI_1.php?type=university").responseJSON { (responseData) -> Void in 
     let swiftyJsonVar = JSON(responseData.result.value!) 

     if let resData = swiftyJsonVar["contacts"].arrayObject { 
      self.arrRes = resData as! [[String:AnyObject]] 
     } 
     if self.arrRes.count > 0 { 
      self.table.reloadData() 
     } 
    } 
    // Do any additional setup after loading the view. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 

    func dataReady(){ 
     self.videos = self.model.videoArray 

     self.table.reloadData() 
    } 


    func tableView(table: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> 
     CGFloat { 
      return(self.view.frame.size.width/320) * 180 
    } 

    func tableview(table:UITableView, numberOfRowsInSection section: Int) ->Int{ 
     return videos.count 
    } 

    func tableVie(table: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> 
     UITableViewCell{ 
      let cell = table.dequeueReusableCellWithIdentifier("jsonCell")! 

     let videoTitle = videos[indexPath.row].videoTitle 



      let label = cell.viewWithTag(2) as! UILabel 
      label.text = videoTitle 



      //cell.textLabel?.text = videoTitle 

пусть videoThumbnailUrlString = видео [indexPath.row] .videoThumbnailUrlString;) ERROR:Expected Expression

пусть videoThumbnailUrl = ноль ERROR - '= не является префиксом унарный оператор! ! и «Аннотации типа отсутствуют в схеме»

{

   let request = NSURLRequest(URL: videoThumbnailUrl!) 

       let session = NSURLSession.sharedSession() 

       let dataTask = session.dataTaskWithRequest(request, completionHandler: {(data:NSData?, response:NSURLResponse?, error:NSError) -> Void in 



        dispatch_async(dispatch_get_main_queue(), {() -> Void in 

        let imageView = cell.viewWithTag(1) as! UIImageView 

        imageView.image = UIImage(data: data!) 


       }) 


       }) 
       dataTask.resume() 
      } 



      return cell 



      func tableView(table: UITableView, didSelectRowAtIndexPath indexpath: NSIndexPath){ 

       self.selectedVideo = self.videos[indexpath.row] 
       self.performSegueWithIdentifier("toVDVC", sender: self) 

    } 

      func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){ 
       let detailViewController = segue.destinationViewController as! VDViewController 
       detailViewController.selectedVideo = self.selectedVideo 
      } 
} 

}}

повторно

+0

Ваши Tableview методы DataSource делегата внутри метода didReceiveMemoryWarning? – gabbler

+0

Да, сэр, я действительно приложил весь код, пожалуйста, посмотрите ... –

ответ

1

Это выглядит так, как будто вы не закрыли метод didReceivedMemoryWarning: и методы TableView делегат затем эффективно внутри этого метода вызывает проблему. Добавьте закрывающий кронштейн, и все должно быть хорошо:

Обновление: Вот обновленный код. Был еще некоторые проблемы с форматированием скобками и ошибка с вашей, если заявление в cellForRowAtIndex:

import UIKit 
import Alamofire 


class tab: UIViewController, UITableViewDataSource, UITableViewDelegate, VideoModelDelegate { 

    @IBOutlet weak var table: UITableView! 
    @IBOutlet weak var name: UILabel! 

    var videos : [Video] = [Video]() 
    var selectedVideo:Video? 
    let model:VideoModel = VideoModel() 
    var arrRes = [[String:AnyObject]]() //Array of dictionary 

    override func viewDidLoad() { 
     super.viewDidLoad() 


     self.model.delegate = self 
     //self.videos = model.getVideos() 

     model.getFeedVideos() 


     self.table.dataSource = self 
     self.table.delegate = self 


     /*Alamofire.request(.GET, "http://online.m-tutor.com/mtutor/gateway/mtutorAPI_1.php?type=university").response { (req, res, data, error) -> Void in 
      print(res) 
      let outputString = NSString(data: data!, encoding:NSUTF8StringEncoding) 
      print(outputString) 
     } 


     Alamofire.request(.GET, "http://online.m-tutor.com/mtutor/gateway/mtutorAPI_1.php?type=university").responseJSON { response in 
      if let swiftyJsonVar = response.data 
      { 

      print("swiftyJsonvar:\(swiftyJsonVar)") 
      } 
     }*/ 



     Alamofire.request(.GET, "http://online.m-tutor.com/mtutor/gateway/mtutorAPI_1.php?type=university").responseJSON { (responseData) -> Void in 
      let swiftyJsonVar = JSON(responseData.result.value!) 

      if let resData = swiftyJsonVar["contacts"].arrayObject { 
       self.arrRes = resData as! [[String:AnyObject]] 
      } 
      if self.arrRes.count > 0 { 
       self.table.reloadData() 
      } 
     } 
     // Do any additional setup after loading the view. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } //ADDED CLOSING BRACKET HERE 

    func dataReady(){ 
     self.videos = self.model.videoArray 

     self.table.reloadData() 
    } 

    func tableView(table: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> 
     CGFloat { 
      return(self.view.frame.size.width/320) * 180 
    } 

    func tableview(table:UITableView, numberOfRowsInSection section: Int) ->Int{ 
     return videos.count 
    } 

    func tableVie(table: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> 
     UITableViewCell{ 
     let cell = table.dequeueReusableCellWithIdentifier("jsonCell")! 
     let videoTitle = videos[indexPath.row].videoTitle 

     let label = cell.viewWithTag(2) as! UILabel 
     label.text = videoTitle 

     //cell.textLabel?.text = videoTitle 

     //CHANGE THESE TWO LINES: 
     //let videoThumbnailUrlString = videos[indexPath.row].videoThumbnailUrlString;) 
     //if let videoThumbnailUrl != nil { 
     //TO THIS: 
     if let videoThumbnailUrl = videos[indexPath.row].videoThumbnailUrlString { 
      let request = NSURLRequest(URL: videoThumbnailUrl!) 

      let session = NSURLSession.sharedSession() 

      let dataTask = session.dataTaskWithRequest(request, completionHandler: {(data:NSData?, response:NSURLResponse?, error:NSError) -> Void in 



       dispatch_async(dispatch_get_main_queue(), {() -> Void in 

       let imageView = cell.viewWithTag(1) as! UIImageView 

       imageView.image = UIImage(data: data!) 


      }) 


      }) 
      dataTask.resume() 
     } 
     return cell 
    } 

    func tableView(table: UITableView, didSelectRowAtIndexPath indexpath: NSIndexPath){ 
     self.selectedVideo = self.videos[indexpath.row] 
     self.performSegueWithIdentifier("toVDVC", sender: self) 
    } 

    func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){ 
     let detailViewController = segue.destinationViewController as! VDViewController 
     detailViewController.selectedVideo = self.selectedVideo 
    } 
} 
+0

Дорогой Джо все еще остается неподключенным ... –

+0

Посмотрите на мое обновление –

+0

Сэр, я внес изменения, но все же существует ошибка , Xcode предлагает мне эти изменения для этой строки «let videoThumbnailUrl! = Nil» (Предложения: 1- Оператор Unary не может быть отделен от его операнда, 2- Последовательные операторы в строке должны быть разделены символом «;»), а другая ошибка остается как будто то же самое. Пожалуйста, помогите мне ... –

Смежные вопросы