致命:数组索引超出范围

时间:2017-04-03 13:57:17

标签: swift2

每个孩子都有一个接收点位置,包括从sqlite数据库中获取的纬度和经度。我有childIdArray,它是childID的数组。我想从我们从getCurrentLocationOfRespectiveDrivers()方法获取的各个驱动程序位置的当前位置计算估计时间(ETA),其中我以从纬度和经度数组的形式从sqlite数据库获取的子项的pickUp点。

但我收到错误

  

致命错误:数组索引超出范围

getCurrentLocationOfRespectiveDrivers()方法中的

任何帮助将受到高度赞赏..提前感谢

var etaArray : [String] = []
var estimatedTime : String?
var latitudeArray : [Double] = []
var longitudeArray : [Double] = []


override func viewDidLoad() {
    super.viewDidLoad()

    let rs = ModelManager.sharedInstance.fetchingPickUpAnnotationsArray(ChildDetailsVC.parentID)
    latitudeArray = rs.latPickUp
    longitudeArray = rs.longPickUp
    print("pickUpLatitudeArray = \(latitudeArray)")
    print("pickUpLongitudeArray = \(longitudeArray)")

    let result = ModelManager.sharedInstance.fetchingChildren( ChildDetailsVC.parentID)
    self.childNameArray = result.childNames
    self.childImageArray = result.childImages
    self.childIDArray = result.chidIDs
    self.childDriverArray = result.childDrivers

   getCurrentLocationOfRespectiveDrivers()

    for (var i = 0; i < childIDArray.count; i++)
    {
        etaArray.append("")
    }
}



func getCurrentLocationOfRespectiveDrivers()
{
    for( var i = 0 ; i < latitudeArray.count ; i++)
    {
                    let url:NSURL = NSURL(string:"http://development.ssntpl.com/gogo_app/api.php?action=getDriverCurrentLocation")!
        let request = NSMutableURLRequest(URL:url)
        request.HTTPMethod = "POST"
        let post:NSString = "child_id=\(childIDArray)"

        request.HTTPBody = post.dataUsingEncoding(NSUTF8StringEncoding)

        let task = NSURLSession.sharedSession().dataTaskWithRequest(request)
            {

                data, response, error in

                if error != nil
                {
                    print("error is \(error)")
                    return;
                }
                do
                {

                    let myJSON =  try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as? NSDictionary


                    if let parseJSON = myJSON
                    {
                        let Status = parseJSON["status"] as! Int
                        let Code = parseJSON["code"] as! Int


                        if (Status == 1 && Code == 200)
                        {
                            let Result = parseJSON["result"] as! NSArray

                            self.etaArray.removeAll()

                         //here i get the crash fatal error: Array index out of range

                            let latitudePickUp = self.latitudeArray[i]
                            let longitudePickUp = self.longitudeArray[i]
                            let CoordinatePickUp = CLLocation(latitude: latitudePickUp, longitude: longitudePickUp)
                            for res in Result
                            {
                                self.estimatedTime = ""
                                if (res["exists"] as! Int == 1)
                                {
                                    let lastLatitude = res["latitude"] as! CLLocationDegrees
                                    let lastLongitude = res["longitude"] as! CLLocationDegrees
                                    let Location : CLLocation = CLLocation(latitude: lastLatitude, longitude: lastLongitude)
                                    let meters:CLLocationDistance = Location.distanceFromLocation(CoordinatePickUp)
                                    print(meters)
                                    let ID = res["child_id"] as! String
                                    let time = round(meters/40000 * 60)
                                    self.estimatedTime = String(time)


                                    self.etaArray.append(self.estimatedTime!)



                                }

                                else
                                {
                                    self.etaArray.append("")
                                }
                            }
                        }


                        else
                        {

                        }


                   }
                }
                catch
                {
                    print(error)
                }
        }


        //executing the task
        task.resume()

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

        self.tableView.reloadData()

    })
}

0 个答案:

没有答案