swift - للعربية - ما معنى name has been used بالعربي
مدقق مؤشر الترابط الرئيسي: تم استدعاء واجهة برمجة التطبيقات لواجهة برمجة تطبيقات مؤشر ترابط الخلفية:- (4)
أنا أستخدم خرائط google في الإصدار Xcode 9 beta و iOS 11.
تظهر لي رسالة خطأ في السجل كما يلي:
مدقق مؤشر الترابط الرئيسي: تم استدعاء واجهة برمجة التطبيقات لواجهة برمجة تطبيقات مؤشر ترابط الخلفية: - [UIApplication applicationState] PID: 4442 ، TID: 837820 ، اسم الموضوع: com.google.Maps.LabelingBehavior ، اسم قائمة الانتظار: com.apple.root.default-qos.overcommit ، جودة الخدمة: 21
لماذا يحدث هذا لأنني متأكد تقريبًا أنني لا أقوم بتغيير أي عناصر واجهة من سلسلة الرسائل الرئيسية في الكود.
override func viewDidLoad() {
let locationManager = CLLocationManager()
locationManager.requestAlwaysAuthorization()
locationManager.requestWhenInUseAuthorization()
if CLLocationManager.locationServicesEnabled() {
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
locationManager.startUpdatingLocation()
}
viewMap.delegate = self
let camera = GMSCameraPosition.camera(withLatitude: 53.7931183329367, longitude: -1.53649874031544, zoom: 17.0)
viewMap.animate(to: camera)
}
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let locValue:CLLocationCoordinate2D = manager.location!.coordinate
print("locations = \(locValue.latitude) \(locValue.longitude)")
}
func mapView(_ mapView: GMSMapView, willMove gesture: Bool) {
}
func mapView(_ mapView: GMSMapView, idleAt position: GMSCameraPosition) {
if(moving > 1){
moving = 1
UIView.animate(withDuration: 0.5, delay: 0, animations: {
self.topBarConstraint.constant = self.topBarConstraint.constant + (self.topBar.bounds.height / 2)
self.bottomHalfConstraint.constant = self.bottomHalfConstraint.constant + (self.topBar.bounds.height / 2)
self.view.layoutIfNeeded()
}, completion: nil)
}
moving = 1
}
// Camera change Position this methods will call every time
func mapView(_ mapView: GMSMapView, didChange position: GMSCameraPosition) {
moving = moving + 1
if(moving == 2){
UIView.animate(withDuration: 0.5, delay: 0, animations: {
self.topBarConstraint.constant = self.topBarConstraint.constant - (self.topBar.bounds.height / 2)
self.bottomHalfConstraint.constant = self.bottomHalfConstraint.constant - (self.topBar.bounds.height / 2)
self.view.layoutIfNeeded()
}, completion: nil)
}
DispatchQueue.main.async {
print("Moving: \(moving) Latitude: \(self.viewMap.camera.target.latitude)")
print("Moving: \(moving) Longitude: \(self.viewMap.camera.target.longitude)")
}
}
أعتقد أن الحل قد تم تقديمه بالفعل ، لأن مشكلتي هي لوحة المفاتيح في الطريق.
قد يتم استدعاء UIKeyboardTaskQueue فقط من سلسلة الرسائل الرئيسية
أولاً ، تأكد من استدعاء دعواتك لخرائط google وتغييرات واجهة المستخدم من سلسلة الرسائل الرئيسية باستخدام:
DispatchQueue.main.async {
//Do UI Code here.
//Call Google maps methods.
}
أيضًا ، قم بتحديث الإصدار الحالي من خرائط google. كان على خرائط Google إجراء تحديثين لمدقق سلاسل الرسائل.
للسؤال: "لماذا يحدث هذا؟" أعتقد أن Apple أضافت تأكيدًا لحالة متطورة كان على Google بعد ذلك تحديثها من أجل.
راجع هذا الرابط https://developer.apple.com/documentation/code_diagnostics/main_thread_checker
بالنسبة لي هذا عملت عندما اتصلت من كتلة.
قم بلف سطور التعليمات البرمجية التي تعدل واجهة المستخدم في
DispatchQueue.main.async {}
للتأكد من تنفيذها في سلسلة الرسائل الرئيسية.
خلاف ذلك ، قد تتصل بهم من مؤشر ترابط الخلفية ، حيث لا يُسمح بتعديلات واجهة المستخدم.
يجب تنفيذ جميع أسطر التعليمات البرمجية هذه من الخيط الرئيسي.