В файле -Swift.h нет типа или протокола с именем CLLocationManagerDelegate - PullRequest
0 голосов
/ 06 марта 2019

Я знаю, что я не первый, кто спрашивает, и я, вероятно, не буду последним, но я не видел ничего, что помогло бы мне, поэтому я все равно спрошу. Я пытаюсь использовать некоторые быстрые и объективные 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)

Я много чего перепробовал, но ни один из них не работал на данный момент. Если кто-то что-то знает и может помочь, это было бы здорово! Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...