2015-03-01 2 views
0

Я пытаюсь получить данные о местоположении (PFGeoPoint) с parse.com, показать его в UITableView и отсортировать его по ближайшему местоположению.Обратный порядок от query.whereKey ("column", nearGeoPoint) в UITableView

Я уже использую этот код с тем же показаны в синтаксической документации:

findPlaceData.whereKey("position", nearGeoPoint:SearchLocationGeoPoint) 

мне удалось получить данные. Мне также удалось показать его в моем UITableView. Проблема в том, что порядок отменен. Я получил самую дальнюю в своей первой камере. Может ли кто-нибудь объяснить, почему это происходит, и как его исправить?

import UIKit 

class SearchTableViewController: UITableViewController { 

    @IBOutlet var SearchTitle: UILabel! 
    var userLocationToPass:CLLocation! 
    var categoryToPass:String! 
    var categoryIdToPass:String! 
    var placeData:NSMutableArray! = NSMutableArray() 

    override init(style: UITableViewStyle) { 
     super.init(style: style) 
     // Custom initialization 
    } 

    required init(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
    } 


    func loadData(){ 
     placeData.removeAllObjects() 
     let searchLocationGeoPoint = PFGeoPoint(location: userLocationToPass) 
     var findPlaceData:PFQuery = PFQuery(className: "Places") 
     findPlaceData.whereKey("category", equalTo: categoryIdToPass) 
     findPlaceData.whereKey("position", nearGeoPoint:searchLocationGeoPoint) 
     findPlaceData.findObjectsInBackgroundWithBlock{ 
      (objects:[AnyObject]!, error:NSError!)->Void in 

      if error == nil{ 
       for object in objects{ 
        let place:PFObject = object as PFObject 
        self.placeData.addObject(place) 
       } 

       let array:NSArray = self.placeData.reverseObjectEnumerator().allObjects 
       self.placeData = NSMutableArray(array: array) 

       self.tableView.reloadData() 

      } 

     } 
    } 

    override func viewWillAppear(animated: Bool) { 
     loadData() 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     SearchTitle.text = categoryToPass 
     println(userLocationToPass) 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 

    override func numberOfSectionsInTableView(tableView: UITableView?) -> Int { 
     return 1 
    } 

    override func tableView(tableView: UITableView?, numberOfRowsInSection section: Int) -> Int { 
     return placeData.count 
    } 

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell:SearchTableViewCell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as SearchTableViewCell 

     let place:PFObject = self.placeData.objectAtIndex(indexPath.row) as PFObject 
     cell.placeName.text = place.objectForKey("name") as? String 
     cell.placeOpenHour.text = place.objectForKey("openhour") as? String 

     return cell 
    } 
} 

ответ

1

Вы намеренно используете reverseObjectEnumerator? Потому что это может повлиять на то, что ваши результаты будут отменены ... Ключ в имени метода ;-)

Если вы отбросите следующие две строки из своего кода, это больше не может быть отменено.

let array:NSArray = self.placeData.reverseObjectEnumerator().allObjects 
self.placeData = NSMutableArray(array: array) 
+0

Ух ты, на самом деле бил меня :-) Я просто не знаю, почему я пропустил эту линию. Спасибо огромное! – Gibran

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

  • Нет связанных вопросов^_^