Swift 2 核心位置不工作

Swift 2 Core Location not working

我正在尝试使用 Swift 2(Xcode 7 beta,iOS 9)设置 CoreLocation,但从未调用 "didUpdateLocations" 函数。我真的很感激我能得到的任何帮助。这是我的代码:

//
//  ZmanimController.swift
//  YidKit
//
//  Created by Dani Smith on 7/12/15.
//  Copyright © 2015 Daniel Smith. All rights reserved.
//

import Foundation
import CoreLocation

class ZmanimController: NSObject, CLLocationManagerDelegate
{
//Variables*****************************************
let locationManager = CLLocationManager()
var lat = 0.0
var long = 0.0
var alt = 0.0
var kosherCocoaLocation: KCGeoLocation = KCGeoLocation()
let dateFormatter = NSDateFormatter()

//The zmanim calendar


override init()
{
    super.init()
    self.locationManager.requestWhenInUseAuthorization()

    locationManager.desiredAccuracy = kCLLocationAccuracyBest
    locationManager.delegate = self
    locationManager.requestWhenInUseAuthorization()
    locationManager.startUpdatingLocation()

    //Calendars
    let zmanimCalendar: KCComplexZmanimCalendar = KCComplexZmanimCalendar(location: kosherCocoaLocation)
    let astronomicalCalendar: KCAstronomicalCalendar = KCAstronomicalCalendar(location: kosherCocoaLocation)
    astronomicalCalendar.workingDate = NSDate()

    //Date formatter stuff
    dateFormatter.timeStyle = .MediumStyle
    dateFormatter.timeZone = NSTimeZone.localTimeZone()

    print(dateFormatter.stringFromDate(zmanimCalendar.alos72()))

}


//loacation stuff**************************
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
{
    var latestLocation: AnyObject = locations[locations.count - 1]
    let locationArray = locations as NSArray
    let locationObj = locationArray.lastObject as! CLLocation
    let coord = locationObj.coordinate

    var latitude = String(format: "%.4f",
        coord.latitude)
    var longitude = String(format: "%.4f",
        coord.longitude)
    var horizontalAccuracy = String(format: "%.4f",
        latestLocation.horizontalAccuracy)
    var altitude = String(format: "%.4f",
        latestLocation.altitude)
    var verticalAccuracy = String(format: "%.4f",
        latestLocation.verticalAccuracy)
    print(latitude)
    print("wooe3reds")
}

func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
    print("error")
}

}

谢谢!

更新: 以下是我如何初始化它:

import Foundation
import UIKit

class ZmanimViewController: YidController
{
override func viewDidLoad()
{
    let controller = ZmanimController()

}
}

您要将 NSLocationWhenInUseUsageDescription 添加到您的 info.plist 中吗?另外,我注意到您调用了 locationManager.requestWhenInUseAuthorization() 两次,为了安全起见,您可以删除一个。

您正在使用

实例化视图
override func viewDidLoad()
{
    let controller = ZmanimController()

}

您是否在同一块中展示它?否则,视图将不会保留在内存中。您应该声明为 属性(在文件顶部)或呈现视图。

当您将 ZmanimController 实例分配为 viewDidLoad 内的局部变量时,它将在该函数 returns 后立即释放。

您应该将对象实例分配为您的 YidController 的对象 属性,这样它将与该对象实例具有相同的生命周期。