2016-04-01 5 views
-1

Plötzlich fing ich an, einen Fehler zu erhalten, der Unbestimmte Verwendung des Indexes sagt, aber wenn ich zum vorherigen Festschreiben in git gehe, dann finde ich alles funktioniert, ich weiß nicht was hätte passieren können. Im Anschluss ist die Klasse von mir: (! PickerValues ​​[Komponente] als NSArray)plötzlich mehrdeutige Verwendung von 'tiefgestellt', aber Code funktionierte vor

import Foundation 
class NewScheduleViewController: UIViewController, UITableViewDataSource, UITableViewDelegate ,UIPickerViewDataSource,UIPickerViewDelegate { 

    @IBOutlet weak var schedulesTable: UITableView! 


    var x = 1 
    var y = 0 
    var z = 0 
    var time1 = Int() 
    var time2 = Int() 
    var rowNumber = Int() 
    var tagNumber = Int() 
    var pickerView: UIPickerView! 
    var pickerValues: NSMutableArray = [] 
    var startingTime = String() 
    var endingTime = String() 
    var daysArray = ["Monday" , "Tuesday" ,"Wednesday" ,"Thursday" ,"Friday" ,"Saturday" ,"Sunday" ]; 
    enum pickerComponent:Int{ 
     case weekday = 0 
     case minutos = 1 
     case meridiano = 2 
    } 

    var schedulesArray = NSMutableArray() 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     pickerValues = [["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"],["30","00"], ["AM", "PM"]] 

     schedulesTable.delegate = self 
     schedulesTable.dataSource = self 
     addLeftBarButton() 

     pickerView = UIPickerView() 
     pickerView.backgroundColor = UIColor.whiteColor() 

     pickerView.dataSource = self 
     pickerView.delegate = self 

     let webServiceHandler = FetchScheduleData.init() 
     webServiceHandler.fetchDataFromWebService(["doctor_id" : 7], closure: { (response:FetchScheduleListResponse) -> Void in 
      if response.doctorschedule?.count == 0 { 

       return; 
      } 
      self.schedulesArray.removeAllObjects() 
      for appointmentListResponse in response.doctorschedule! { 
       print("Value of index is \(appointmentListResponse)") 
       self.schedulesArray.addObject(appointmentListResponse) 
       print("Index is " ,appointmentListResponse.day_index) 
      } 
      self.schedulesTable.reloadData() 
     }) 


    } 

    func addLeftBarButton() { 

     let myBackButton:UIButton = UIButton() 
     myBackButton.addTarget(self, action: "segmentedAction:", forControlEvents: UIControlEvents.TouchUpInside) 
     myBackButton.setImage(UIImage(named: "newBack.png"), forState: .Normal) 
     myBackButton.setTitleColor(UIColor.blueColor(), forState: UIControlState.Normal) 
     myBackButton.sizeToFit() 
     let myCustomBackButtonItem:UIBarButtonItem = UIBarButtonItem(customView: myBackButton) 
     self.navigationItem.leftBarButtonItem = myCustomBackButtonItem 
     let img = UIImage(named: "top-menu.jpg") 
     navigationController?.navigationBar.setBackgroundImage(img, forBarMetrics: .Default) 

    } 

    @IBAction func segmentedAction(sender: AnyObject) {   
     self.dismissViewControllerAnimated(true, completion: nil) 
    } 


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

    //functions for table 

    func numberOfSectionsInTableView(tableView: UITableView) -> Int { 

     return 1 

    } 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

     return daysArray.count 

    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell : ScheduleCell! = tableView.dequeueReusableCellWithIdentifier("scheduleCell") as! ScheduleCell 
     cell.selectionStyle = UITableViewCellSelectionStyle.None;   
     cell!.editButton.tag = indexPath.row; 
     cell!.editButton.addTarget(self, action: "yourButtonClicked:", forControlEvents: UIControlEvents.TouchUpInside)   
     cell.startTime.inputView = pickerView 
     cell.startTime.tag = (indexPath.row)*2 + 1 
     cell.endTime.inputView = pickerView 
     cell.endTime.tag = (indexPath.row)*2 + 2 
     cell.startTime.addTarget(self, action: "textFieldDidChange:", forControlEvents: UIControlEvents.EditingDidBegin) 
     cell.endTime.addTarget(self, action: "textFieldDidChange:", forControlEvents: UIControlEvents.EditingDidBegin) 
     cell.dayLabel.text = daysArray[indexPath.row]   
     cell.startTime.userInteractionEnabled = false 
     cell.endTime.userInteractionEnabled = false 

     for (var i = 0 ; i < schedulesArray.count ; i++ ) { 
      let scheduleDetails : FetchScheduleDetailResponse = self.schedulesArray.objectAtIndex(i) as! FetchScheduleDetailResponse 
      print(scheduleDetails.day_index) 
      if (Int(scheduleDetails.day_index!) == indexPath.row+1) { 
       cell.startTime.text = scheduleDetails.start_hour 
       cell.endTime.text = scheduleDetails.end_hour 
      } 
     }     
     return cell as ScheduleCell 
    } 

    func textFieldDidChange (sender : UITextField) {   
     if(sender.tag % 2 == 0) { 
     rowNumber = sender.tag/2 
      y = 3 
     } else { 
     rowNumber = (sender.tag/2) + 1 
      y = 2 
     }   
     tagNumber = sender.tag   
    } 

    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int { 
     return pickerValues.count 
    } 

    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{ 
     return pickerValues[component].count 
    } 

    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {   
     return pickerValues[component][row] as? String 
    }  
    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {   
     self.view.endEditing(true)   
     let indexPath = NSIndexPath(forRow: rowNumber - 1, inSection: 0) 
     let cell = self.schedulesTable.cellForRowAtIndexPath(indexPath) as! ScheduleCell     
     let weekDay2 = pickerComponent.weekday.rawValue 
     let weekDay = pickerValues[weekDay2][pickerView.selectedRowInComponent(weekDay2)] as! String 
     if y == 1 { 
     } else { 
      let minutos2 = pickerComponent.minutos.rawValue 
      let minutos = pickerValues[minutos2][pickerView.selectedRowInComponent(minutos2)] as! String 
      let meridiano2 = pickerComponent.meridiano.rawValue 
      let meridiano = pickerValues[meridiano2][pickerView.selectedRowInComponent(meridiano2)] as! String    
      if meridiano == "PM" { 
       z = 2 
      } else { 
       z = 1 
      }    
      if y == 2 { 
       if cell.startTime.tag == tagNumber { 
        cell.startTime.text = "\(weekDay) : \(minutos) \(meridiano)" 
         startingTime = "\(weekDay) : \(minutos) \(meridiano)" 
       } 

       if z == 2 { 
        time1 = Int(weekDay)!*60 + Int(minutos)! + 12*60 
       }else{ 
        time1 = Int(weekDay)!*60 + Int(minutos)! 
       } 
       print("time1 = \(time1)") 
      } 

      if y == 3 { 
       if z == 2 { 
        time2 = Int(weekDay)!*60 + Int(minutos)! + 12*60 
       } 
       else{ 
        time2 = Int(weekDay)!*60 + Int(minutos)! 
       } 
       if time1 >= time2 { 
       } 
       if ((time2 - time1) % DoctorInformation.call_duration) != 0 { 
       } 
       else{ 
        if cell.endTime.tag == tagNumber { 
         cell.endTime.text = "\(weekDay) : \(minutos) \(meridiano)" 
         endingTime = "\(weekDay) : \(minutos) \(meridiano)" 
        } 

       }     
       print(DoctorInformation.call_duration) 
       let nd2 = time2 - time1 
       let nd = (time2 - time1) % DoctorInformation.call_duration 
       print("dif = \(nd2)") 
       print("modulo = \(nd)") 
       print("time2 = \(time2)") 

      } 

     } 

    } 


    func yourButtonClicked (sender : UIButton){ 
     let indexPath = NSIndexPath(forRow: sender.tag, inSection: 0) 
     let cell = self.schedulesTable.cellForRowAtIndexPath(indexPath) as! ScheduleCell 

     if sender.titleForState(UIControlState.Normal) == "Edit" { 
      sender.setTitle("Done", forState: UIControlState.Normal) 
      cell.startTime.userInteractionEnabled = true 
      cell.endTime.userInteractionEnabled = true 

     } else { 
      sender.setTitle("Edit", forState: UIControlState.Normal) 
      cell.startTime.userInteractionEnabled = false 
      cell.endTime.userInteractionEnabled = false    
      let userDefaultData = NSUserDefaultData() 
      let webServiceHandler = SetScheduleDataHandler.init() 
      webServiceHandler.fetchDataFromWebServicePost(["doctor_id": userDefaultData.getDoctotId() , "start_time" : startingTime , "end_time" : endingTime , "day_index" : 1], closure: {(response:SetScheduleResponse) -> Void in 
       Alerts.showAlert("Done", alertTitle: response.Status!, viewController: self) 
      }) 


     } 

    } 


    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 

       return 75 

     }  
} 

This is where error has come

+0

Zu viel Code. Bitte geben Sie nur ein minimales Beispiel an, das das Problem reproduzieren kann. –

+0

Swift2 ist veraltet. Ziehen Sie die Migration zu Swift3 so schnell wie möglich in Betracht. –

Antwort

-1

Also durch verbringen einige Zeit ich in der Lage war, das Problem zu lösen, wie

folgt

return [Zeile] wie! String

+2

Warum verwenden Sie 'NSMutableArray' in Swift? Tu das nicht. Es ist schlecht. Wie wirklich. Verwenden Sie einfach ein Swift-Array. – Fogmeister