2015-09-24 2 views
1

После успешного запуска программы ошибка будет показано на отладочной областиNSURLSession/NSURLConnection HTTP загрузка не удалась, -9802

import UIKit 
import CoreLocation 

protocol ItemDetailViewControllerDelegate: class { 
    func itemDetailViewControllerDidCancel(controller: ItemDetailViewController) 
    func itemDetailViewController(controller: ItemDetailViewController, didFinishAddingItem item: NoToDoItem) 
    func itemDetailViewController(controller: ItemDetailViewController, didFinishEditingItem item: NoToDoItem) 

} 

class ItemDetailViewController: UITableViewController, CLLocationManagerDelegate { 

    @IBAction func myLocation(sender: AnyObject) { 

     self.LocationManager.delegate = self 
     self.LocationManager.desiredAccuracy = kCLLocationAccuracyBest 
     self.LocationManager.requestWhenInUseAuthorization() 
     self.LocationManager.startUpdatingLocation() 

    } 

    let LocationManager = CLLocationManager() 

    @IBOutlet weak var textField: UITextField! 
    @IBOutlet weak var descriptionTextView: UITextView! 
    @IBOutlet weak var doneBarButton: UIBarButtonItem! 
    @IBOutlet weak var dueDateLabel: UILabel! 

    weak var delegate: ItemDetailViewControllerDelegate? 

    var itemToEdit: NoToDoItem? 
    var dueDate = NSDate() 
    var datePickerVisible = false 

    override func viewDidLoad() { 
     super.viewDidLoad() 


     if let item = itemToEdit { 
      title = "Edit Item" 
      textField.text = item.text 
      descriptionTextView.text = item.text 
      dueDate = item.dueDate 
      doneBarButton.enabled = true 
     } 

     updateDueDateLabel() 
    } 

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


    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
     CLGeocoder().reverseGeocodeLocation(manager.location!, completionHandler: { (placemarks, error) -> Void in 

      if (error != nil) { 
       print("Error") 
       return 
      } 

      if let pm = placemarks?.first 
      { 
       self.displayLocationInfo(pm) 
      } 
      else { 
       print("errorData") 
      } 

     }) 

    } 

    func displayLocationInfo(placemark: CLPlacemark){ 
     self.LocationManager.stopUpdatingLocation() 

     print(placemark.locality) 
     print(placemark.postalCode) 
     print(placemark.administrativeArea) 
     print(placemark.country) 
    } 

    func locationManager(manager: CLLocationManager, didFailWithError error: NSError) { 
     print("Error:" + error.localizedDescription) 

    } 

    override func viewWillAppear(animated: Bool) { 
     super.viewWillAppear(animated) 
     textField.becomeFirstResponder() 
    } 

    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 

     let oldText: NSString = textField.text! 
     let newText: NSString = oldText.stringByReplacingCharactersInRange(range, withString: string) 

     doneBarButton.enabled = (newText.length > 0) 
     return true 
    } 

    @IBAction func done(sender: AnyObject) { 
     if let item = itemToEdit { 
      item.text = textField.text! 

      textField.becomeFirstResponder() 
      item.text = descriptionTextView.text! 
      descriptionTextView.becomeFirstResponder() 

      item.dueDate = dueDate 

      delegate?.itemDetailViewController(self, didFinishEditingItem: item) 
     } else { 
      let item = NoToDoItem() 
      item.text = textField.text! 
      item.dueDate = dueDate 

      delegate?.itemDetailViewController(self, didFinishAddingItem: item) 
     } 

    } 

    @IBAction func cancel(sender: AnyObject) { 
     delegate?.itemDetailViewControllerDidCancel(self) 
    } 

    override func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? { 
     if indexPath.section == 2 && indexPath.row == 1 
     { 
      return indexPath 
     } else { 
      return nil 
     } 
    } 

    func updateDueDateLabel() { 
     let formatter = NSDateFormatter() 
     formatter.dateStyle = .MediumStyle 
     formatter.timeStyle = .ShortStyle 
     dueDateLabel.text = formatter.stringFromDate(dueDate) 
    } 

    func showDatePicker() { 

     datePickerVisible = true 

     let indexPathDateRow = NSIndexPath(forRow: 1, inSection: 2) 
     let indexPathDatePicker = NSIndexPath(forRow: 2, inSection: 2) 

     if let dateCell = tableView.cellForRowAtIndexPath(indexPathDateRow) 
     { 
      dateCell.detailTextLabel!.textColor = dateCell.detailTextLabel!.tintColor 
     } 
     tableView.beginUpdates() 
     tableView.insertRowsAtIndexPaths([indexPathDatePicker],withRowAnimation: .Fade) 

     tableView.reloadRowsAtIndexPaths([indexPathDateRow], withRowAnimation: .None) 

     tableView.endUpdates() 

     if let pickerCell = tableView.cellForRowAtIndexPath(indexPathDatePicker) { 
      let datePicker = pickerCell.viewWithTag(100) as! UIDatePicker 
      datePicker.setDate(dueDate, animated: false)} 
    } 

    func hideDatePicker() 
    { 
     if datePickerVisible { 
      datePickerVisible = false 
      let indexPathDateRow = NSIndexPath(forRow: 1, inSection: 2) 
      let indexPathDatePicker = NSIndexPath(forRow: 2, inSection: 2) 
      if let cell = tableView.cellForRowAtIndexPath(indexPathDateRow) { 
       cell.detailTextLabel!.textColor = UIColor(white: 0, alpha: 0.5) 
      } 
      tableView.beginUpdates() 
      tableView.reloadRowsAtIndexPaths([indexPathDateRow], withRowAnimation: .None) 
      tableView.deleteRowsAtIndexPaths([indexPathDatePicker], withRowAnimation: .Fade) 
      tableView.endUpdates() 
     } 
    } 

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     if section == 2 && datePickerVisible { return 3 
     } else { 
      return super.tableView(tableView, numberOfRowsInSection: section) 
     } 
    } 

    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
     if indexPath.section == 2 && indexPath.row == 2 { 
      return 217 
     } else { 
      return super.tableView(tableView, heightForRowAtIndexPath: indexPath) 
     } 
    } 

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     // 1 
     if indexPath.section == 2 && indexPath.row == 2 { // 2 
      var cell: UITableViewCell! = tableView.dequeueReusableCellWithIdentifier("DatePickerCell") 

      if cell == nil { 
       cell = UITableViewCell(style: .Default, 
        reuseIdentifier: "DatePickerCell") 
       cell.selectionStyle = .None 
       // 3 
       let datePicker = UIDatePicker(frame: CGRect(x: 0, y: 0, 
        width: 320, height: 216)) 
       datePicker.tag = 100 
       cell.contentView.addSubview(datePicker) 
       // 4 
       datePicker.addTarget(self, action: Selector("dateChanged:"), forControlEvents: .ValueChanged) 
      } 
      return cell 
      // 5 
     } else { 
      return super.tableView(tableView, cellForRowAtIndexPath: indexPath) 
     } 
    } 

    func textFieldShouldReturn(textField: UITextField) -> Bool{ 

     textField.resignFirstResponder() 
     return true 
    } 

    func textFieldDidBeginEditing(textField: UITextField) { 
     hideDatePicker() 
    } 

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 
    { 
     tableView.deselectRowAtIndexPath(indexPath, animated: true) 
     textField.resignFirstResponder() 


     if indexPath.section == 2 && indexPath.row == 1 { if !datePickerVisible { 
      showDatePicker() 
     } 
     else 
     { 
      hideDatePicker() 
      } 
     } 
    } 

    override func tableView(tableView: UITableView, var indentationLevelForRowAtIndexPath indexPath: NSIndexPath) -> Int { 
     if indexPath.section == 2 && indexPath.row == 2 { 
      indexPath = NSIndexPath(forRow: 0, inSection: indexPath.section) 
     } 
     return super.tableView(tableView, indentationLevelForRowAtIndexPath: indexPath) 
    } 

    func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool{ 

     if text == "\n" 
     { 
      descriptionTextView.resignFirstResponder() 
      return false 
     } 
     return true 
    } 

    func dateChanged(datePicker: UIDatePicker) { 
     dueDate = datePicker.date 
     updateDueDateLabel() 
    } 
} 
+0

Можете ли вы уточнить? Что вы сделали для отладки? Где это не удается? Каков ваш конкретный вопрос? Кроме того, не могли бы вы отредактировать свой вопрос, чтобы исправить форматирование кода, пожалуйста? – Mariano

+0

Вы проверили это http://stackoverflow.com/questions/30720813/cfnetwork-sslhandshake-failed-ios-9? –

+0

После запуска программы он отображает ошибку в панели отладки ..... – Ashwini

ответ

0

Вы должны добавить только ключ NSAllowsArbitraryLoads ДА в словаре NSAppTransportSecurity в вашем info.plist файл.

Например,

<key>NSAppTransportSecurity</key> 
<dict> 
     <key>NSAllowsArbitraryLoads</key> 
    <true/> 
</dict> 

enter image description here

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