使用CL Location的基于位置的应用。我的代码中一行出现问题

我正在制作此应用,并不断收到错误消息“ LocationsStorage”类型的值没有成员“ saveclLocationToDisk”

我不知道问题出在哪里,我什至尝试研究Apple网站上的文档,但我仍然不知道问题出在哪里。该行位于第4节之后

import UIKit
import CoreLocation
import UserNotifications

@UIApplicationmain

class AppDelegate: UIResponder,UIApplicationDelegate {
  var window: UIWindow?
  static let geoCoder = CLGeocoder()

  let center = UNUserNotificationCenter.current()
  let locationmanager = CLLocationmanager()

  func application(_ application: UIApplication,didFinishlaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
    let rayWenderlichColor = UIColor(red: 0/255,green: 104/255,blue: 55/255,alpha: 1)
    UITabBar.appearance().tintColor = rayWenderlichColor
    center.requestAuthorization(options: [.alert,.sound]) { granted,error in

    }
    locationmanager.requestAlwaysAuthorization()
    locationmanager.startMonitoringVisits()
    locationmanager.delegate = self as? CLLocationmanagerDelegate

    locationmanager.distanceFilter = 35
    locationmanager.allowsBackgroundLocationUpdates = true
    locationmanager.startUpdatingLocation()
    return true
  }

}
extension AppDelegate: CLLocationmanagerDelegate {
  func locationmanager(_ manager: CLLocationmanager,didVisit visit: CLVisit) {
    // create CLLocation from the coordinates of the CLVisit
    let clLocation = CLLocation(latitude: visit.coordinate.latitude,longitude: visit.coordinate.longitude)
    AppDelegate.geoCoder.reverseGeocodeLocation(clLocation) { placemarks,_ in
      if let place = placemarks?.first {
        let description = "\(place)"
        self.newVisitReceived(visit,description: description)
      }
    }

  }

  func locationmanager(_ manager: CLLocationmanager,didUpdateLocations locations: [CLLocation]) {
      // 1
      guard let location = locations.first else {
        return
      }

      // 2
      AppDelegate.geoCoder.reverseGeocodeLocation(location) { placemarks,_ in
      if let place = placemarks?.first {
        // 3
        let description = "Fake visit: \(place)"

        //4
        let fakeVisit = FakeVisit(
          coordinates: location.coordinate,arrivalDate: Date(),departureDate: Date())
        self.newVisitReceived(fakeVisit,description: description)
      }
    }
  }
  // MY issue is here in the line with the ** before and after it
  func newVisitReceived(_ visit: CLVisit,description: String) {
    let location = Location(visit: visit,descriptionString: description)
    **LocationsStorage.shared.saveLocationOnDisk(location)**

    // save location to the disk

    // Get location description

    let content = UnmutableNotificationContent()
    content.title = "New Journal Entry ?"
    content.body = location.description
    content.sound = .default

    let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 1,repeats: false)
    let request = UNNotificationRequest(identifier: location.dateString,content: content,trigger: trigger)

    center.add(request,withCompletionHandler: nil)

  }

}

final class FakeVisit: CLVisit {
  private let myCoordinates: CLLocationCoordinate2D
  private let myArrivalDate: Date
  private let myDepartureDate: Date

  override var coordinate: CLLocationCoordinate2D {
    return myCoordinates
  }

  override var arrivalDate: Date {
    return myArrivalDate
  }

  override var departureDate: Date {
    return myDepartureDate
  }

  init(coordinates: CLLocationCoordinate2D,arrivalDate: Date,departureDate: Date) {
    myCoordinates = coordinates
    myArrivalDate = arrivalDate
    myDepartureDate = departureDate
    super.init()
  }

  required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
  }
}
z492572861 回答:使用CL Location的基于位置的应用。我的代码中一行出现问题

好像您正在通过以下tutorial

在本教程的一半以上,有一个部分和代码块如下所示:

在磁盘上保存记录

打开LocationsStorage.swift。在类的底部,添加以下函数:

func saveLocationOnDisk(_ location: Location) {
  // 1
  let encoder = JSONEncoder()
  let timestamp = location.date.timeIntervalSince1970

  // 2
  let fileURL = documentsURL.appendingPathComponent("\(timestamp)")

  // 3
  let data = try! encoder.encode(location)

  // 4
  try! data.write(to: fileURL)

  // 5
  locations.append(location)
}

确保已添加此方法,并使用正确的名称在代码中调用该方法

本文链接:https://www.f2er.com/2782197.html

大家都在问