从 Parse 查询 GeoPoint 并将其作为 MKAnnotation 添加到 MapKit?
Query a GeoPoint from Parse and add it to MapKit as MKAnnotation?
我正在尝试查询存储在 Parse 后端的 PFGeoPoints 数组。我在 Parse 中有一个名为 "Post" 的 PFObject,分配给它的数据例如 "location"、"title"、"message" 等
从我的应用程序发布后,所有内容都会发送到 Parse,并正确存储在后端。我在从 Parse 检索 "Post" PFObject 的属性并将它们存储到地图上的 MKAnnotation 中时遇到问题。
这是我的 MapViewViewController:
import UIKit
import Parse
import CoreLocation
import MapKit
class MapViewViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {
@IBOutlet var mapView: MKMapView!
var MapViewLocationManager:CLLocationManager! = CLLocationManager()
var currentLoc: PFGeoPoint! = PFGeoPoint()
var postTitle: String!
var postBody: String!
override func viewDidLoad() {
super.viewDidLoad()
mapView.showsUserLocation = true
mapView.delegate = self
MapViewLocationManager.delegate = self
MapViewLocationManager.startUpdatingLocation()
mapView.setUserTrackingMode(MKUserTrackingMode.Follow, animated: true)
}
override func viewDidAppear(animated: Bool) {
var annotationQuery = PFQuery(className: "Post")
currentLoc = PFGeoPoint(location: MapViewLocationManager.location)
annotationQuery.whereKey("Location", nearGeoPoint: currentLoc, withinMiles: 10)
annotationQuery.findObjectsInBackgroundWithBlock {
(points, error) -> Void in
if error == nil {
// The find succeeded.
println("Successful query for annotations")
// Do something with the found objects
//THIS IS WHERE I GET LOST WITH THE PARSE QUERY/ADDING ANNOTATION TO MAP
//THE FOLLOWING CODE PRINTS THE CORRECT POSTCOUNT STORED IN PARSE
println("total posts: \(points?.count)")
} else {
// Log details of the failure
println("Error: \(error)")
}
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func logoutButton(sender: UIBarButtonItem) {
PFUser.logOut()
dismissViewControllerAnimated(true, completion: nil)
}
@IBAction func newPostButton(sender: AnyObject) {
performSegueWithIdentifier("mainToNewPost", sender: self)
}
我想查询和检索 Post 以及用户输入的所有信息(PFGeoPoint、标题、body),并将其转换为地图上的 mkannotation。
这是我的 Parse 后端的照片,可以让您更好地了解:
根据您提供的屏幕截图,我假设您正在查询 Post
对象,它是一个 PFObject
。因此,您可以从返回的 posts
数组中访问每个 post
对象。然后您可以使用每个 post
对象中的 Location
属性,并向您的 mapView 添加注释。
annotationQuery.findObjectsInBackgroundWithBlock {
(posts, error) -> Void in
if error == nil {
// The find succeeded.
println("Successful query for annotations")
let myPosts = posts as [PFObject]
for post in myPosts {
let point = post["Location"] as PFGeoPoint
let annotation = MKPointAnnotation()
annotation.coordinate = CLLocationCoordinate2DMake(point.latitude, point.longitude)
self.mapView.addAnnotation(annotation)
}
} else {
// Log details of the failure
println("Error: \(error)")
}
}
我正在尝试查询存储在 Parse 后端的 PFGeoPoints 数组。我在 Parse 中有一个名为 "Post" 的 PFObject,分配给它的数据例如 "location"、"title"、"message" 等
从我的应用程序发布后,所有内容都会发送到 Parse,并正确存储在后端。我在从 Parse 检索 "Post" PFObject 的属性并将它们存储到地图上的 MKAnnotation 中时遇到问题。
这是我的 MapViewViewController:
import UIKit
import Parse
import CoreLocation
import MapKit
class MapViewViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {
@IBOutlet var mapView: MKMapView!
var MapViewLocationManager:CLLocationManager! = CLLocationManager()
var currentLoc: PFGeoPoint! = PFGeoPoint()
var postTitle: String!
var postBody: String!
override func viewDidLoad() {
super.viewDidLoad()
mapView.showsUserLocation = true
mapView.delegate = self
MapViewLocationManager.delegate = self
MapViewLocationManager.startUpdatingLocation()
mapView.setUserTrackingMode(MKUserTrackingMode.Follow, animated: true)
}
override func viewDidAppear(animated: Bool) {
var annotationQuery = PFQuery(className: "Post")
currentLoc = PFGeoPoint(location: MapViewLocationManager.location)
annotationQuery.whereKey("Location", nearGeoPoint: currentLoc, withinMiles: 10)
annotationQuery.findObjectsInBackgroundWithBlock {
(points, error) -> Void in
if error == nil {
// The find succeeded.
println("Successful query for annotations")
// Do something with the found objects
//THIS IS WHERE I GET LOST WITH THE PARSE QUERY/ADDING ANNOTATION TO MAP
//THE FOLLOWING CODE PRINTS THE CORRECT POSTCOUNT STORED IN PARSE
println("total posts: \(points?.count)")
} else {
// Log details of the failure
println("Error: \(error)")
}
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func logoutButton(sender: UIBarButtonItem) {
PFUser.logOut()
dismissViewControllerAnimated(true, completion: nil)
}
@IBAction func newPostButton(sender: AnyObject) {
performSegueWithIdentifier("mainToNewPost", sender: self)
}
我想查询和检索 Post 以及用户输入的所有信息(PFGeoPoint、标题、body),并将其转换为地图上的 mkannotation。
这是我的 Parse 后端的照片,可以让您更好地了解:
根据您提供的屏幕截图,我假设您正在查询 Post
对象,它是一个 PFObject
。因此,您可以从返回的 posts
数组中访问每个 post
对象。然后您可以使用每个 post
对象中的 Location
属性,并向您的 mapView 添加注释。
annotationQuery.findObjectsInBackgroundWithBlock {
(posts, error) -> Void in
if error == nil {
// The find succeeded.
println("Successful query for annotations")
let myPosts = posts as [PFObject]
for post in myPosts {
let point = post["Location"] as PFGeoPoint
let annotation = MKPointAnnotation()
annotation.coordinate = CLLocationCoordinate2DMake(point.latitude, point.longitude)
self.mapView.addAnnotation(annotation)
}
} else {
// Log details of the failure
println("Error: \(error)")
}
}