2016-03-24 5 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 konform zum Protokoll "UITableViewDataSource, Video Mode Delegate"?

[Zusätzliche Fehler] [Fehler] 1 Wie meine Viewcontroller zu Protokoll "UITableViewDataSource und Videomodus Delegate" entsprechen machen?

Ich habe eine Reihe von vorgeschlagenen Änderungen in den vorherigen Threads versucht, aber nichts hat mich durch, bitte helfen Sie mir aus.

Vielen Dank im Voraus

import UIKit 
import Alamofire 

Klasse tab: UIViewController, UITableViewDataSource, UITableViewDelegate, VideoModelDelegate 'Tab' ERROR- Typ nicht entspricht Protokoll '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 

lassen videoThumbnailUrlString = Videos [indexPath.row] .videoThumbnailUrlString;) ERROR:Expected Expression

videoThumbnailUrl lassen = nil ERROR - '= ist kein Präfix unärer Operator' ! und 'Typ Anmerkung fehlt im Muster'

{

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

} }

re

+0

Sind Ihre Tableview Datenquelle Delegatmethoden innerhalb des didReceiveMemoryWarning Methode? – gabbler

+0

jawohl, ich habe den ganzen Code angehängt bitte mal schauen ... –

Antwort

1

Es sieht aus, als ob Sie nicht die Methode didReceivedMemoryWarning geschlossen haben: und die Tableview Delegatmethoden sind dann effektiv innerhalb dieser Methode das Problem verursacht. Fügen Sie eine schließende Klammer hinzu und es sollte in Ordnung sein:

Update: Hier ist der aktualisierte Code. Es gab einige weitere Formatierungsprobleme mit Klammern und ein Fehler mit dem if-Anweisung in der 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

Lieber Joe noch alle Probleme bleiben unfixiert ... –

+0

Schau dir mein Update an –

+0

Sir, ich habe die Änderungen vorgenommen, aber trotzdem liegt der Fehler vor . Der Xcode schlägt mir diese Änderungen für diese Zeile "let videoThumbnailUrl! = Nil" vor (Vorschläge: 1- Unary-Operator kann nicht von seinem Operanden getrennt werden, 2-aufeinander folgende Anweisungen in der Zeile sollten durch ';' getrennt werden) und andere Fehler bleiben übrig als ob das selbe wäre. Bitte helfen Sie mir ... –

Verwandte Themen