2015-05-13 5 views
5

मैं GMSMapView पर 200 जीएमएसमार्कर प्रदर्शित करने के लिए एक ऐप विकसित कर रहा हूं, मैंने मार्कर प्रदर्शित करने के लिए 2 विधियों का प्रयास किया। विधि 1 थोड़ा धीमा है, लेकिन कोई त्रुटि नहीं होती है, हालांकि, विधि 2 वास्तविक डिवाइस पर सुचारू रूप से चलता है लेकिन मुझे आईएमओ सिम्युलेटरGMSThreadException आईओएस सिम्युलेटर पर GMSMarkers प्रदर्शित करते समय

पर प्रश्नों का परीक्षण किया गया है: 1. क्या विधि 2 का उपयोग करना जारी रखना ठीक है? 2. यदि विधि 2 का उपयोग करना ठीक नहीं है, तो पूरी प्रक्रिया के लिए लोडिंग समय को कम करने के लिए कोई अच्छा सुझाव?

func Method1() { 
    for location in locationsArrayFromSomeWhere { 
     let placeMarker = PlaceMarker(coordinate: location.coordinate) 
     . 
     .//Simple Setup 
     . 
     placeMarker.map = self.mapView 
    } 
} 

func Method2() { 
    dispatch_async(dispatch_get_global_queue(Int(QOS_CLASS_USER_INITIATED.value), 0)) { 
     for location in locationsArrayFromSomeWhere { 
      let placeMarker = PlaceMarker(coordinate: location.coordinate) 
      . 
      .//Simple Setup 
      . 
      dispatch_async(dispatch_get_main_queue()) { 
       placeMarker.map = self.mapView 
      } 
     } 
    } 
} 
enter code here 

किसी भी मदद Orz

Update1

सराहना की @ztan नीचे दिए रूप में, मैं मुख्य थ्रेड में यह सब क्या करना है, इस के अलावा कोई बेहतर समाधान है?

उत्तर

5

Google मानचित्र iOA SDK की आवश्यकता है कि सभी ड्राइंग ईवेंट मुख्य थ्रेड पर किए जाएंगे।

तो, अपनी दूसरी विधि के लिए, आपको dispatch_get_main_queue() बंद करने के अंदर अपने सभी निर्माता सेटअप कोड को रखना होगा।

तो अपने विधि 2 हो जाएगा:

func Method2() { 
    dispatch_async(dispatch_get_global_queue(Int(QOS_CLASS_USER_INITIATED.value), 0)) { 
     for location in locationsArrayFromSomeWhere { 

      dispatch_async(dispatch_get_main_queue()) { 
       let placeMarker = PlaceMarker(coordinate: location.coordinate) 
       . 
       .//Simple Setup 
       . 
       placeMarker.map = self.mapView 
      } 
     } 
    } 
} 
+0

धन्यवाद नाम दिया गया है आप के लिए जवाब है, लेकिन कैसे यह काम करता है (विधि 2) एक वास्तविक डिवाइस पर एक त्रुटि के बिना? – johnnyman

+0

Google मानचित्र iOA SDK की आवश्यकता है कि सभी ड्राइंग ईवेंट मुख्य थ्रेड पर किए जाएंगे, यहां तक ​​कि 'चलो मर्कर = प्लेसमार्कर (समन्वय: location.coordinate)' को मुख्य थ्रेड के अंदर बुलाया जाना चाहिए। – ztan

+0

आपको बहुत धन्यवाद मैं समझता हूं कि "Google मानचित्र iOA SDK आवश्यक है कि सभी ड्राइंग ईवेंट मुख्य थ्रेड पर किए जाएंगे" लेकिन मेरे प्रश्न हैं: जब मैं वास्तविक डिवाइस पर विधि 2 का उपयोग करता हूं तो कोई त्रुटि नहीं होती है। बीटीडब्ल्यू क्या आपके पास स्विफ्ट पर कोई अच्छा मार्कर क्लस्टर ट्यूटोरियल है? – johnnyman

1

स्विफ्ट 3,0

dispatch_async(dispatch_get_main_queue()) 

को

DispatchQueue.main.async 
संबंधित मुद्दे