Swift 2 核心位置不起作用
Posted
技术标签:
【中文标题】Swift 2 核心位置不起作用【英文标题】:Swift 2 Core Location not working 【发布时间】:2015-07-13 22:46:22 【问题描述】:我正在尝试使用 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()
【问题讨论】:
你是如何实例化这个对象的?你对它有强烈的引用吗? @Paulw11 在 UIViewController 中:“让控制器 = ZmanimController()” 是在函数中还是作为对象属性?请更新您的问题以显示该行的上下文。 【参考方案1】:当您将ZmanimController
实例分配为viewDidLoad
内的局部变量时,它将在该函数返回时立即释放。
您应该将对象实例分配为您的YidController
的对象属性,这样它将与该对象实例具有相同的生命周期。
【讨论】:
就是这样!感谢您的帮助!【参考方案2】:您是否将NSLocationWhenInUseUsageDescription
添加到您的info.plist 中?另外,我注意到您拨打了两次locationManager.requestWhenInUseAuthorization()
,为了安全起见,您可以删除一次。
你正在实例化视图
override func viewDidLoad()
let controller = ZmanimController()
您是否在同一块中展示它?否则,视图将不会保留在内存中。您应该声明为属性(在文件顶部)或显示视图。
【讨论】:
是的。奇怪的是我在我的应用程序的另一部分使用核心位置,它在那里工作正常。我不知道为什么它在这里不起作用。以上是关于Swift 2 核心位置不起作用的主要内容,如果未能解决你的问题,请参考以下文章