2016-08-15 23 views
1

大丈夫ですので、ビューがロードされると、設定された範囲のユーザーの現在の場所内にジオポイントを持つParseオブジェクトが読み込まれます。これは、ここに動作します。これで「ロケーションの変更」ごとにテーブルビューを常に更新するにはどうすればよいですか?

let query: PFQuery = PFQuery(className: "Events") 
     query.whereKey("location", nearGeoPoint: myGeoPoint, withinMiles: range) 

     query.findObjectsInBackgroundWithBlock { (objects: [PFObject]?, error) in 
      if error == nil { 
       print(objects) 

       for object in objects! { 
        self.names.append(object["Name"] as! String) 
        self.descriptions.append(object["description"] as! String) 
       } 

       self.tableView.reloadData() 

      } else { 
       print(error) 
      } 
     } 
    } 

問題は、私は私が予測し、ユーザの位置の変更は、かなり頻繁に起こるのだろうたびreloadData常に ORちょうどこのテーブルを持っているのいずれか必要です。範囲内にあるアイテムを表示する必要があるため、どこかにユーザードライブを置くことはできず、テーブルには最後の場所のアイテムが表示されます。

アプリの他の部分については、特定のボタンをクリックしたときにテーブルが更新されるだけですが、このテーブルを常に正しく更新する方法やユーザーの場所が変更されるたびに更新する必要があります。私は1秒の数分の1に設定されたタイマーを使用しようとしましたが、それは問題を引き起こし、正しい方法ではないようです。

どうすればいいですか?いつもテーブルを更新してみましたが、私は試しました。

override func viewDidAppear(animated: Bool) { 
     self.tableView.reloadData() 
    } 

しかし何もしません。 loadObjects()も見ましたが、エラーがありました。これを達成する最良の方法は何ですか?

EDITS:

if (CLLocationManager.locationServicesEnabled()) 
     { 
      locationManager = CLLocationManager() 
      locationManager.delegate = self 
      locationManager.desiredAccuracy = kCLLocationAccuracyBest 
      locationManager.requestAlwaysAuthorization() 
      //locationManager.startUpdatingLocation() //so not always updating 
      locationManager.startMonitoringSignificantLocationChanges() 
     } 


func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
     // locations contains an array of recent locations, but this app only cares about the most recent 
     // which is also "manager.location" 
     myLoc = PFGeoPoint(location: manager.location) 
     print("significant change - \(myLoc)") 
     tableView.reloadData() 
    } 
    func locationManager(manager: CLLocationManager, didFailWithError error: NSError!) { 
     print("failed") 
    } 
+0

重要な場所の変更を通知するように登録し、アプリケーションがフォアグラウンドになったときにすぐにテーブルビューをリロードするか、フラグを設定して、アプリケーションがフォアグラウンドになったときにテーブルビューをリロードします。 – vadian

+0

フォアグランドにはどういう意味ですか?コールする機能がありますか? – skyguy

+0

いいえ、呼び出されるAppDelegateにデリゲートメソッドがあります。私はちょうど、アプリケーションがアクティブでない間にテーブルビューを再ロードすることは意味をなさないと指摘したいと思います。 – vadian

答えて

0

あなたの場所マネージャにdistanceFilterプロパティを設定します。

ここでは、ユーザーの現在地が50メートル以上変更された場合にのみ更新されます。

+0

を参照してください。私の編集内容を見て、やったことがうまくいくかどうか確認してください。場所の重大な変更を引き起こしているにもかかわらず、テーブルビューを再読み込みしているようではありません – skyguy

+0

変更する必要がありますか? – skyguy

+0

編集にこれを追加したことがありません... if文の中に入れてください。 – penatheboss

関連する問題