2016-04-20 2 views
0

Я работаю над iPhone App и задаюсь небольшим вопросом. У меня есть функция и вы хотите вызвать эту функцию в моей функции viewDidLoad. Я пробовал этот путь, но получаю сообщение об ошибке, когда хочу вызвать функцию dropPin.Правильно вызывать функцию

override func viewDidLoad() { 
    super.viewDidLoad() 

    //drop the pin when view did load !Missing argument for parameter ¨didUpdateLocation¨ in call! 
    dropPin(CLLocationManager, didUpdateLocations: [CLLocation]) 
} 

func dropPin(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 

    let location = locations.last 
    let center = CLLocationCoordinate2D (latitude: location!.coordinate.latitude, longitude: location!.coordinate.longitude) 

    //initialize our Pin with our coordinates and the context from AppDelegate 
    let pin = Pin(annotationLatitude: center.latitude, annotationLongitude: center.longitude, context: appDelegate.managedObjectContext!) 
    //add the annotation to the map 
    mapView.addAnnotation(pin) 
    //save our context. We can do this at any point but it seems like a good idea to do it here. 
    appDelegate.saveContext() 
} 

Благодарим за помощь!

+0

Ошибка отправляется как прокомментированная строка на четвертой строке блока кода в вопросе. '// удаляем штифт при загрузке представления! Отсутствует аргумент для параметра ¨didUpdateLocation¨ в вызове!' – ZGski

+5

Вы не передаете экземпляры объектов в свою функцию, вы передаете имена классов. Было бы неплохо, если бы вы прочитали очень основную книгу по программированию, прежде чем идти слишком дальше. Узнайте, какая разница между определением класса и экземпляром класса (т. Е. Объекта). Все очень хорошо, если кто-то отправляет правильный код, и вы его копируете, и он работает, но вам нужно понять, что вы сделали неправильно, и хороший способ сделать это - потратить пару часов на чтение базовой книги Swift или аналогичный учебный материал, предназначенный для абсолютных новичков. – Gruntcakes

+0

И это не только первый параметр, который является неправильным. – Gruntcakes

ответ

0
[CLLocation] 

- это неосвещенный массив CLLocations. Это еще не массив. Если вы сделали

[CCLocation]() 

Это будет экземпляр массива с 0 объектами. Это круто, если вы хотите передать пустой массив. Но тогда

let location = locations.last 

будет иметь проблему, потому что нет последнего объекта. Пусто.

0

Ваша ошибка в том, что вы проходите типы (CLLocationManager, [CLLocation]) вместо экземпляров этих типов.

0

Я бы рекомендовал повторно titleing ваш вопрос, вы не получите помощь, которую вы ищете с таким названием, что ваш вопрос относится к Core Location ...

Тем не менее, ваша ошибка на самом деле говорит вам, что неверно ...

Отсутствует аргумент для параметра ¨didUpdateLocation¨ в вызове!

смысл, значение didUpdateLocation не существует ....

Подумайте об этом ... вы не показали весь код, но я готов поспорить, что вы не просили услуги определения местоположения, что его текущее местоположение еще ...

, например ....

убедиться, что все прямо в вашем определении класса ...

класса myClassName: UINavigationControllerDelegat е, CLLocationManagerDelegate {

и что у вас есть вар, который ваше местоположение менеджера где- вар бросающие: CLLocationManager!

и как вы сделали, реализовать функцию ... функ бросающие (менеджер: CLLocationManager, didUpdateLocations места: [CLLocation]) {

, то вам необходимо убедиться, что у вас есть что-то вроде self.dropPin = CLLocationManager() self.dropPin.delegate = само self.dropPin.desiredAccuracy = kCLLocationAccuracyBest checkLocationAuthorizationStatus()

и в вашей функции checlLocationAuthorisationStatus вам нужно будет проверить, включены ли ваши службы определения местоположения ... CLLocationManager.locationServicesEnabled()

О, человек, это будет длинный ответ, - но все без кода ... в любом случае, я думаю, вы должны переименовать свой вопрос и показать больше кода .... место службы не 20 второй вещь для реализации .... вам потребуется dropPin.requestWhenInUseAuthorization() и куча других деталей, в конечном счете, вы будете ... dropPin.startUpdatingLocation() , а затем вам может фактически начать использовать

удачи ...

+0

Спасибо за ваш ответ. Я уже получил всю реализацию служб определения местоположения, и она работает нормально. Я действительно думаю, что я только что вызвал функцию false. Но в любом случае. Я внедрил свою функцию непосредственно в vieDidLoad, потому что мне просто нужна эта функция один раз. Это работает для меня. Но я хочу знать, в чем была моя неудача. –

Смежные вопросы