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
的对象 属性,这样它将与该对象实例具有相同的生命周期。
我正在尝试使用 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
的对象 属性,这样它将与该对象实例具有相同的生命周期。