从 Parse 查询 GeoPoint 并将其作为 MKAnnotation 添加到 MapKit? [英] Query a GeoPoint from Parse and add it to MapKit as MKAnnotation?

查看:22
本文介绍了从 Parse 查询 GeoPoint 并将其作为 MKAnnotation 添加到 MapKit?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试查询存储在 Parse 后端的 PFGeoPoints 数组.我在 Parse 中有一个名为Post"的 PFObject,并为其分配了数据,例如位置"、标题"、消息"等.

I am trying to query an array of PFGeoPoints stored on the Parse backend. I have a PFObject in Parse called "Post", with data assigned to it such as "location", "title", "message", etc.

从我的应用程序发布后,所有内容都会发送到 Parse,并正确存储在后端.我在从 Parse 检索Post"PFObject 的属性并将它们存储到地图上的 MKAnnotation 中时遇到问题.

everything is being sent to Parse upon posting from my app and is properly stored in the backend. I am having issues retrieving properties of the "Post" PFObject from Parse and storing them into an MKAnnotation on the map.

这是我的 MapViewViewController:

Here is my 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)
}

我想查询和检索包含用户输入的所有信息(PFGeoPoint、标题、正文)的帖子,并将其转换为地图上的 mkannotation.

I would like to query and retrieve the Post with all of its info entered by the user (PFGeoPoint, title, body) and turn it into an mkannotation on the map.

这是我的 Parse 后端的照片,可以让您更好地了解:

Here is a photo of my Parse backend to give you a better idea:

http://i1249.photobucket.com/albums/hh512/zachkhan3/Screen%20Shot%202015-04-22%20at%2012.39.42%20PM.png

推荐答案

根据您提供的屏幕截图,我假设您正在查询 Post 对象,它是一个 PFObject.因此,您可以从返回的 posts 数组中访问每个 post 对象.然后,您可以使用每个 post 对象的 Location 属性,并向您的 mapView 添加注释.

From the screenshot you provided, I assume you are querying the Post object which is a PFObject. So you can access each post object in from the returned posts array. Then you can use the Location property from each post object, and add annotation to your 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 查询 GeoPoint 并将其作为 MKAnnotation 添加到 MapKit?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆