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 核心位置不起作用的主要内容,如果未能解决你的问题,请参考以下文章

我是不是正确使用核心位置?它似乎不起作用

核心数据 NSManagedObject 到 JSON 编码不起作用

Swift iPad - 按钮不起作用

删除核心数据条目不起作用

核心位置在模拟器 Xcode 9.4.1 中不起作用

Swift requestWhenInUseAuthorization 不起作用