Я знаю, что я не первый, кто спрашивает, и я, вероятно, не буду последним, но я не видел ничего, что помогло бы мне, поэтому я все равно спрошу. Я пытаюсь использовать некоторые быстрые и объективные C для своего приложения Unity, и мне удалось это сделать. Но, поскольку я пытаюсь использовать свое местоположение в фоновом режиме, я пытаюсь использовать CLLocationManagerDelegate следующим образом:
Example.swift:
import Foundation
import CoreLocation
import CoreLocation.CLLocationManagerDelegate
import UIKit
@objc class Example : NSObject {
@objc static func StartTracking(){
var att: FindMeTask = FindMeTask();
att.StartTracking()
}
}
class FindMeTask: UIViewController, CLLocationManagerDelegate {
var bgtask: UIBackgroundTaskIdentifier = UIBackgroundTaskIdentifier.invalid;
var coord: Coor = Coor()
private lazy var locationManager: CLLocationManager = {
let manager = CLLocationManager()
manager.desiredAccuracy = kCLLocationAccuracyBest
manager.delegate = self
manager.requestAlwaysAuthorization()
manager.allowsBackgroundLocationUpdates = true
return manager
}()
public func StartTracking(){
locationManager.delegate = self;
locationManager.startUpdatingLocation()
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations
locations: [CLLocation]){
guard let mostRecentLocation = locations.last else{
return
}
let lat : Double = (mostRecentLocation.coordinate.latitude)
let lon : Double = (mostRecentLocation.coordinate.longitude)
coord.SetCoord(aLat: lat, aLon: lon)
if(UIApplication.shared.applicationState == .active){
print("In foreground")
}else{
print("In background, location is %@", coord)
}
}
}
Example.mm
#import <Foundation/Foundation.h>
#import "unityswift-Swift.h"
#import <CoreLocation/CoreLocation.h>
#import <CoreLocation/CLLocationManagerDelegate.h>
extern "C" {
void _startTracking(){
[Example StartTracking];
}
}
И, наконец, мой UnitySwift-Bridging-Header.h
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "UnityInterface.h"
#import "CoreLocation/CoreLocation.h"
#import "CoreLocation/CLLocationManagerDelegate.h"
Итак, с этим кодом он выдает мне эту ошибку: в моем name-Swift.h нет типа или протокола с именем «CLLocationManagerDelegate», когда он пытается объявить @interface моего FindMeTask (@interface FindMeTask: UIViewController).
Также, возможно, это поможет, я не могу расширить интерфейс, созданный в моем .mm-файле с помощью CLLocationManagerDelegate (например: @interface test: CLLocationManagerDelegate)
Я много чего перепробовал, но ни один из них не работал на данный момент. Если кто-то что-то знает и может помочь, это было бы здорово! Заранее спасибо!