MapKit从核心数据加载位置

时间:2016-02-09 18:30:44

标签: swift core-data annotations mapkit

我在从核心数据加载信息(位置)时遇到问题,我的核心数据[商店]有列纬度(纬度)和长度(经度)。但是无法将其加载到MapView。

   import UIKit
   import MapKit
   import CoreData

   class allMapPinsViewController: UIViewController, MKMapViewDelegate {

var shop: [Shops]! = []

var appDelegate: AppDelegate!
var sharedContext: NSManagedObjectContext!

@IBOutlet weak var mapView: MKMapView!

override func viewDidLoad() {
    super.viewDidLoad()

    appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    sharedContext = appDelegate.managedObjectContext

    mapView.delegate = self
    self.mapView.addAnnotations(fetchAllPins())
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func fetchAllPins() -> [Shops]? {
    do {
        let fetchRequest = NSFetchRequest (entityName: "Shops")
        let results = try sharedContext.executeFetchRequest(fetchRequest) as! [Shops]
        return results

 } catch let error as NSError {
    print("Could not fetch \(error), \(error.userInfo)")
  }
}

1 个答案:

答案 0 :(得分:1)

addAnnotations(:)方法接受一个参数,该参数是MKAnnotation的数组。你没有传递它......没有,因为allPins没有返回值。您需要更改allPins(),以便返回MKAnnotation数组。

要使allPins()这样做,您需要为每个纬度/长度对构造MKAnnotation,将其添加到数组,并在函数末尾返回数组。 MKAnnotation是一个协议,因此您无法直接实例化它。您需要拥有一些采用MKAnnotation的类,创建其实例,并将这些实例添加到数组中。