2011-08-26 31 views
12

Harita bölgesini yüklemeyi deniyorum ve MKMapView temsilci yöntemleri ikinci veya sonraki yüklemede çağrılmıyor. Temsilci yöntemlerinin hiçbiri, hiçbir zaman çağrılmamaktadır. Tek yöntem olarak adlandırılanMKMapView önbelleği nasıl temizlenir?

ios4, mapview fayans resimlerini önbelleğe alır.

Bu satırları MKMapViewDelegate Protokolü Referans belgelerinde buldum. Vurgulanan çizgi benim problemim.

Geçerli yöntemle ilişkilendirilen harita döşemeleri yüklendiğinde bu yöntem denir. Yeni bir görünen alan görünümüne kaydırıldığında ve fayanslar mevcut olmadığında harita döşemeleri istenir. Harita döşemeleri, haritanın şu anda görünür olmayan bölümleri için de istenebilir. Örneğin, harita görünümü, kullanıcı tarafından küçük tavaların üstesinden gelmek için ihtiyaç duyulan görünür alanı çevreleyen karoları yükleyebilir.

Harita yüklendikten sonra belirli işlemleri gerçekleştirmem gerekiyor, ancak yukarıda belirtilen temsilci yöntemlerinin hiçbiri aranmadığından istenen işlevleri gerçekleştiremiyorum. Önbellek temizlemek ya da bunun için alternatif bir çözüm sağlamak için herhangi bir düzeltme önerebilir miyim? Zaten here ve this açıklanan yöntemleri kullanmayı denedim, ancak hala kod çalışmayı başaramıyorum.

+0

Bu temsilci yöntemlerini kullanarak tam olarak ne yapmaya çalışıyorsunuz? – AlexB

+0

didFinishLoadingMap içinde bir ekran yakalama ekranına ihtiyacım var ve bu temsilci yöntemi yalnızca bir kez çağrılır, fayansların önbelleğe alınmasından sonra ne aramalar bitti ne de failLoad delege. Ben şimdi ne yapmalıyım? –

+0

Bu konuyla ilgili Apple Bug # 13774496 dosyasını açtım ve sorunun iOS6'da hâlâ mevcut olduğunu gösteren bir örnek uygulama oluşturdum: https://github.com/iwasrobbed/MapKitDelegateBug – iwasrobbed

cevap

3

Ben böyle çift willStartLoadingMap, didFinishLoadingMap ve regionDidChange, can düşünüyorum: willStartLoadingMap yılında

  • true bir loading bayrağı set; didFinishLoadingMap numaralı telefondan
  • , yükleme flag değerini false olarak ayarlayın ve ayrıca ekranı yakalayan yöntem için kuyruğa alınmış bir çağrınız olup olmadığını kontrol edin. Eğer öyleyse, onu arayın; regionDidChange içinde
  • loading bayrağını işaretleyin ve false olarak ayarlanmışsa, ekranı yakalayan yöntemi çağırın. Aksi takdirde, kuyruk, harita yüklenmeyi bitirdiğinde yürütülür.

Eğer fayans yüklendikten sonra ekran yakalama olduğundan eminseniz Bu şekilde.

Ancak, bölgeDidChange birçok kez çağrılabilir; bu nedenle, yalnızca harita görünümü önemli ölçüde değiştiğinde ekranı yakaladığınızdan emin olun (önceki harita bölgesini/merkezini ve geçerli harita bölgesini/merkezini karşılaştırabilirsiniz).

+0

Teşekkür ederim alexb. Önerdiğin adımlarla birlikte küçük bir yama ekledim ve hile yaptı. –

+0

Bu, internet bağlantınızı kaybettiğiniz senaryo için işe yaramıyor; bu nedenle daha fazla fayans yüklenemiyor. Halen haritanın tamamen dolu olduğunu söyleyen delegeyi çağırıyor. Apple'ın kısmında bir böcek gibi görünüyor. – iwasrobbed

2

Yeni bir proje oluşturdum ve delegeyi görüntü denetleyicime bağladım. Söz konusu üçün ilk iki yöntemi denir. Tüm karoları yüklediğinden, hata temsilcisi yöntemi çağrılmadı.

Kısa bir süre önce benzer sorunlara girdim. MKMapView'ı alt sınıflara ayırdım ve özel init yöntemlerinde ve awakeFromNib: öğesinde delegeyi ayarlamayı unuttum. Belki de sorunlarınıza bu sebep oluyor.

İlgili konular