2017-12-11 30 views
0

지도 전체에서 특수 효과에 대한 길 찾기를 오랫동안 시도하고 있습니다. 나는 최근에 그 일을하는 방법을 찾았지만, 이제는 모든 주석이지도에 나타나지는 않을 것입니다. 내 모든 사용자 정보를 저장하려면 Cloudkit의 공개 데이터베이스를 사용하고 있습니다. 모든 뷰 컨트롤러에 대해 변수 annotation = MKPointAnnotation()을 사용할 수있게 된 이후로 내 모든 주석이지도에 표시되지 않았습니다.지도에 특수 효과가로드되지 않습니다.

이다 나는 방향으로 얼마나 : 이것은 내 주석을 표시하는 방법입니다

let annotation = MKPointAnnotation() 

@IBAction func getDirections(_ sender: Any) { 
    let view = annotation.coordinate   
    print("Annotation: \(String(describing: view))") 
    let currentLocMapItem = MKMapItem.forCurrentLocation() 
    let selectedPlacemark = MKPlacemark(coordinate: view, addressDictionary: nil) 
    let selectedMapItem = MKMapItem(placemark: selectedPlacemark) 
    let mapItems = [selectedMapItem, currentLocMapItem] 
    let launchOptions = [MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDriving] 
    MKMapItem.openMaps(with: mapItems, launchOptions:launchOptions) 
} 

를 @로

This application is modifying the autolayout engine from a background thread after the engine was accessed from the main thread. This can lead to engine corruption and weird crashes. 
+3

이 오류는 백그라운드 스레드에서 UI 변경을 수행하고 있음을 나타냅니다.이 때문에이 오류 로그가 표시됩니다. 코드를 업데이트하고 주 스레드의 모든 UI 변경 사항을 작성하십시오. – Surjeet

답변

2

: 지금이 오류를 받고 있어요

func fetch() { 
    let truePredicate = NSPredicate(value: true) 
    let eventQuery = CKQuery(recordType: "User", predicate: truePredicate) 
    let queryOperation = CKQueryOperation(query: eventQuery) 
    queryOperation.recordFetchedBlock = { (record : CKRecord!) in 

     self.truck.append(record) 

     self.annotation.title = record?["username"] as? String 
     self.annotation.subtitle = record?["hours"] as? String 
     if let location = record?["location"] as? CLLocation { 
      self.annotation.coordinate = location.coordinate 
     } 

     print("recordFetchedBlock: \(record)") 

     self.mapView.addAnnotation(self.annotation) 
    } 

    queryOperation.queryCompletionBlock = { (cursor, error) in 

     print("queryCompletionBlock: \(self.truck)") 
    } 

    database.add(queryOperation) 
} 

Surjeet는 메인 스레드에서 모든 UI 변경 사항을 작성한다고 말했다.

DispatchQueue.main.async { 
    self.mapView.addAnnotation(self.annotation) 
} 
+0

감사합니다! 주 스레드에 대해 강조하고 있었고, dispatchQueue를 잘못된 위치에 두었습니다. 나는 전체 컨트롤러에서 "let annotation = mkpointannotation()"을 사용할 때지도가 하나의 주석 만 표시하는 방법에 대해 여전히 혼란스러워합니다. – kcamp