2016-04-05 18 views
0

'u sonlandırırken uygulama çöküyor. Geliştirdiğimiz uygulamada son birkaç ay içinde aralıklı olarak aşağıdaki soruna bakıyoruz.Sunulan UIViewController

App: Swift'de geliştirilmiş bir tabbar tabanlı gezinme ile oldukça karmaşık bir iOS uygulaması. Çok sayıda iftira ve sunum var.

Sorun: Görünüm denetleyicileri reddedildiğinde, uygulama çökmelerine rastlıyoruz. Bu çökmeler yeniden üretilemez ve bunun kesinlikle gerçekleşeceği bir senaryo bulamazsınız. Uygulama kodumuzdaki bir satırı belirterek çakılmadı. Hem iOS 8 hem de iOS 9 cihazlarının çeşitli sürümlerinde gözlemlenir. Çökme ile ilgili herhangi bir kayıt alamıyoruz. görüntülerde görüldüğü gibi

Crash State Screen Shot

Crash State Screen Shot 2

ile devam etmek pek bir şey yok. Ancak, aylar boyunca sürekli çökmeler gözlemlenirken, Xcode penceresinin sol çubuğundaki Thread 1'de bir şey fark ettik. çökmesine yol yığını her zaman son bulacak [UINavigationController viewWillAppear:]

Ayrıca yığın görüldüğü gibi gösteren bir çizgidir '_CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER ...' bize bir NSNotification seçici bir ayırmanın çağrıldığı şüpheli yapılan sınıf. Bunun için, tüm sınıflandırmalarda tüm NSNotification gözlemcilerini ayrılmadan önce çıkardık ve her sınıfın sınırsız yöntemlerini kullanarak günlükleri kaydettik ve gerektiğinde ayrılmalarını sağladık. Bu hala sorunu çözmedi.

Lütfen bu konuda bize yardımcı olabilir misiniz?

+1

Enstrümanlarda Zombies aracını kullanmayı denediniz mi? Uygulamanın serbest bırakılan bir nesneyi çağırdığı geçmişte benzer sorunları gördüm ve bu, belirli bir öğeyi tanımlamamı sağladı. – CodeBender

+0

Sunulan görüntü denetleyicilerini nasıl reddediyorsunuz? Kendilerini mi kovuyorlar yoksa bir delege modeli mi kullanıyorsunuz? Sunulan görüntü denetleyicisi için bir temsilci kullanmalısınız, böylece işten atılmak üzere "istekte bulunabilirsiniz". Bir temsilci kullanıyorsanız, temsilci özellikleriniz zayıf olarak bildirildi mi? – rplankenhorn

+0

@YourAdHere: Evet, uygulamayı Zombies aracını kullanarak profillendirdim. Bir yanıtınToSelector olduğunu fark ettim: görüşme yapılmış olan VC ile doğrudan ilişkili olmayan bazı ViewController [gönderilmeden ayrılır]. Ayrılma işleminden önce her sınıftaki tüm bildirim gözlemcilerini kaldırdığımdan emin oldum. Serbest bırakılan bir nesnenin çağrılması için başka nedenler olabilir mi? Bana biraz ışık tutabilir misin? –

cevap

0

Delege kalıbı kullanıyor musunuz? Öyleyse, temsilci özellikleri her zaman zayıf olarak bildirilmelidir. Bir yerde bir temsilci mülküne güçlü bir başvuru yaptığınızı ve bildirimleri kullanan bir denetleyicinin ayrılmamış olduğunu tahmin ediyorum.

+0

Hayır, tüm denetleyicileri reddetmek için bir temsilci deseni kullanılmaz. Sunulan görüntü denetleyicinin, sunulduğu denetleyiciden bir tetikleyici tarafından reddedilmesi gerektiğinde kullanılır. Ve evet, delegeler her zaman uygulama boyunca zayıftır. –

İlgili konular