Uygulamamı simüle ettiğimde bu sorunu yaşıyorum, bu bir hata veya uyarı değil, ancak konsolumda görünüyor, bunu daha önce hiç yaşayan oldu mu?
Uygulamamı simüle ettiğimde bu sorunu yaşıyorum, bu bir hata veya uyarı değil, ancak konsolumda görünüyor, bunu daha önce hiç yaşayan oldu mu?
Yanıtlar:
Benim durumumda, bir tablo görünümündeki iki sekmeyi çok hızlı tıkladığınızda bu hata oluşur.
Sonuç yanlış başlık adına neden olur, geri düğmesi kaybolur. Birisi bir görünüme bastığınızda bundan bahsetti set animated:NO
. Hata kaybolur ancak yine de bazı garip davranışlara neden olur. İki görünümü iter, ardından tablo görünümü ekranına geri dönmek için iki kez geri gitmeniz gerekir.
Bu sorunu çözmek için denediğim yöntem:
Ekle BOOL cellSelected;
içinde viewWillAppear
cellSelected = YES;
didselectcell'de delege if (cellSelected){cellSelected = NO; do action ; }
Bu, iki farklı hücrenin çok hızlı tıklanmasını önlemeye yardımcı olur.
Benim durumumda, [self performSegueWithIdentifier:@"SomeIdentifier" sender:self];
bir UINavigationController
öğenin viewDidLoad
yöntemi içinde tetiklediğimde oldu .
Onu viewDidAppear
yönteme taşımak sorunu çözdü.
Bunun nedeni büyük olasılıkla viewDidLoad
süslü animasyonların hepsinde bitmemiş, oysa viewDidAppear
her şey bitmiş olmasıdır.
Bende de bu sorun var. Bu soruna iki çözüm buldum:
UINavigationController
Bu sorunun çözüldüğü alt sınıf buldum . Tamponlu Gezinme DenetleyicisiBundan kaçınmak için kodunuzu farklı bir döngüde çalıştırmalısınız
double delayInSeconds = 0.1;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
// Put your code here
[self presentViewController:self.yourModalVC animated:YES completion:nil];
});
dispatch_async
ana kuyruk içine almaktır. Önemli dispatch_async
olan ana kuyruktaki diğer tüm animasyonlar bitene kadar beklemesidir. bir gecikme kullanmaktan çok daha iyidir çünkü: 1- Bir gecikmenin yeterli olup olmadığını asla bilemezsiniz, ana cihazınıza bağlıdır. 2- Gecikmeyi aşırıya kaçarsınız ve bir şeyler gecikir. bunu deneyin:dispatch_async(dispatch_get_main_queue(), ^{[self presentViewController:self.yourModalVC animated:YES completion:nil];});
Aynı sorunla ilgili çok sorun yaşadım. Bu şekilde çözdüm
1) UIViewController's
Belirlenmiş başlatıcı kullanmıyorsunuz initWithNibName:bundle:
. Sadece kullanmak yerine kullanmayı deneyin init
.
2) animated:YES
HAYIR olarak ayarlayın ve bu sorunu çözdü. Örneğin.[self.navigationController pushViewController: viewController_Obj animated:NO];
Gezinme denetleyicisini kullanarak aynı sorunu yaşadım ve diğer denetleyicileri ona ittim. Buffered Navigation Controller ve diğer birkaç yaklaşımı kullanmayı denedim , ancak benim için işe yaramadı. Bunu anlamak için biraz zaman harcadıktan sonra, önceki işlem (animasyon) devam ederken (sanırım yaklaşık 0,5 saniye süre) yeni görünüm denetleyicisine basmaya çalıştığınızda bu sorunun oluştuğunu fark ettim. Her neyse, navigasyon denetleyicisini delege ederek ve önceki animasyon bitimlerini bekleyerek hızlı çözüm yaptım.
Bu yöntemlerin aşırı yüklenmesinde uygun süper yöntemi çağırmak için -viewWillAppear, -viewDidAppear, -viewDidLoad, -viewWillDisappear, -viewDidDisappear'ı unutmadığınızdan emin olun. Örneğin benim durumumda yöntem adı şu şekilde eşleşmiyor:
-(void)viewDidAppear
{
[super viewDidDisappear];
//some code staff
..
}
beliren ve kaybolan yöntemlerin uyumsuz olduğunu fark edin
super.viewWillAppear()
içinde viewDidDisappear()
.
'Başlangıç / bitiş görünüm geçişlerine yönelik dengesiz çağrılar'
Son ilgili animasyon tamamlanmadan önce bir animasyonun başladığını söylüyor. Öyleyse, yenisini itmeden önce herhangi bir görünüm kontrol cihazını kullanıyor musunuz? Yoksa köküne mi dönüyor? evet ise bunu animasyonsuz yapmayı dene yani[self.navigationController popToRootViewControllerAnimated:NO];
Ve bunun sorunu çözüp çözmediğine bakın, Benim durumumda hile yaptı.
Bu sorunu, UITabbar olmadan bir viewController'dan bir UIPrintInteractionController çağırdığım ve ne UINavigationBar'ı çağırdığım için aldım. UIPrintInteractionController'ın doğru printInteractionControllerParentViewController'ı alamadığı görülüyor. Yöntemi temsilciye uygulamak ve benim için çalışan geçerli rootViewController'ı döndürmek.
- (UIViewController*)printInteractionControllerParentViewController:(UIPrintInteractionController*)printInteractionController;
Modal diyalogların geri sarılmasını içeren benzer bir sorun yaşadım. Çözümü burada yayınladı ...
https://stackoverflow.com/a/38795258/324479
[Sorun]
Gezinme Denetleyicisi -> VC1 -Push -> VC2 -PopOver veya Modal Segue -> VC3.
VC3, VC1'e geri dönüyor.
VC2'den VC3'e Segue PopOver ve Modal olduğunda, çözme bir uyarı ile sona erer: UIViewController için görünüm geçişlerini başlatmak / bitirmek için dengesiz çağrılar "
VC'den VC'ye Segue itilirse, uyarı kaybolur.
[Çözüm]
Çözme mantığı bunu hallederse harika olurdu. Belki bu bir hatadır, belki de değildir. Her iki durumda da çözüm, VC2'yi (açılır pencereye sahip denetleyici) geri sarmanın hedefi yapmak, ardından nav denetleyicisini açmadan önce görünmesinin bitmesini beklemektir. Bu, geri sarma (ters açılır pencere) animasyonunun daha geri gitmeden önce bitirmek için yeterli zamana sahip olmasını sağlar. Animasyonlar kapalıyken bile beklemesi gerekir, yoksa hatayı alırsınız.
VC2 kodunuz aşağıdaki gibi olmalıdır. (Swift)
class VC2: UIViewController {
private var unwind = false
@IBAction func unwindToVC1(segue:UIStoryboardSegue) {
unwind = true
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
if unwind {
self.navigationController?.popViewControllerAnimated(false)
}
}
}
Alt görünüm olarak modal görünüm denetleyicisine sahip bir görünüm ekliyorsanız durum oluşabilir. Kullanmak için en iyisi:
-(void) viewDidAppear:(BOOL)animated {
[self presentViewController:self.yourModalVC animated:YES completion:nil];
}
Temel olarak, görüntü yaşam döngüsünün, o zaman görüntülemeye çalıştığınız viewControllers için düzenlenmediğini söylüyor.
Gezinme denetleyicisinin pop yöntemini kullandığımda da aynı sorunu yaşıyorum Uygulamamda gezinme denetleyicisi için ayrı bir mantık kullanıyorum, Bu nedenle gezinme çubuğunun kullanımından kaçındım ve her zaman gizlidir. Ardından, geri düğmesi ve olaylarını işlemek için özel bir görünüm ve bildirim kullanıyorum. bildirim gözlemcileri kaydedilir ve kaldırılmaz. Böylece bildirim iki kez tetiklenir ve yukarıda belirtilen hatayı oluşturur. Bu tür hataları almak için kodunuzu iyice kontrol edin.
Ne 's değerinde için, ben bir çağrı içermeyen bu aynı hata var [super viewDidLoad:animated]
benim de viewDidLoad
geçersiz kılma.
Bir NIB'den bir düğmeye dokunduğumda da bu sorunu yaşadım. Bir olayı iki IBAction yöntemine göndermek için yanlışlıkla düğmeyi kablolamıştım, her biri bir pushViewController yaptı: animasyonlu
Sebep mesaj için: Bu ileti görüntülenir olsun eğer ve bastırıyorlar yalnızca / diğerine Görünüm denetleyicisi sunulması viewWillAppear
, loadView
, init
veya viewDidLoad
yöntem Görüntüleme geçerli Kontrolör
Hata Mesajını Kaldırmanın Yolu: İtme / sunum kodunuzu viewDidAppear
yönteme taşıyın sorunu çözecektir
Swift 4
Benim sorunum, mevcut olanımın işlenmesi tamamlanmadan önce başka bir VC sunmamdı.
Çözüm, hızlı bir gecikmeden sonra nextVC'mi sunmaktı.
YAPMAMANIZ GEREKENLER
override func viewDidLoad() {
super.viewDidLoad()
self.present(MyNextVC(), animated: true, completion: nil)
}
NE YAPMALISINIZ
override func viewDidLoad() {
super.viewDidLoad()
//Wait until the view finished to be constructed
perform(#selector(showMyNextVC), with: nil, afterDelay: 0.01)
}
@objc func showCityList() {
self.present(MyNextVC(), animated: true, completion: nil)
}
Break'i ayarlamayı unuttuğumda bu problemi yaşadım; görünümü bir geçiş ifadesiyle ittikten sonra!
Burası gibi:
case 1:{
SomeViewController *someViewController = [[SomeViewController alloc]initWithNibName:@"SomeViewController" bundle:Nil];
[self.navigationController pushViewController:someViewController animated:YES];
[someViewController release];
}
break; //Forgetting to set break here:
bir çözüm olabilir,
[NSTimer scheduledTimerWithTimeInterval:0.05(or as required) target:self
selector:@selector(your_selector_method_to_push_the_view) userInfo:nil repeats:NO];
Bir UIViewController'ı yüklemesi tamamlanmadan önce kapatmaya çalışırsanız bununla karşılaşabilirsiniz.
Bu mesajı konsolda aldım ve tamamen yeni UIViewController'ı sunan UIViewController'a odaklanıyordum, başarılı olamadı. Sonunda sorunun, sunduğum UIViewController'da olduğunu keşfettim, çünkü kullanıcı hesabına giriş yapmadı.
Umarım bu birine yardımcı olur.
Bu benim için zordu: Ben geçersiz kıldım
override func shouldAutomaticallyForwardRotationMethods() -> Bool {
return true
}
geçersiz kılmaksızın:
override func shouldAutomaticallyForwardAppearanceMethods() -> Bool {
return true
}
pencere kök gezinti denetleyicimde. daha sonra bir çocuk gezinme denetleyicisi yukarıda belirtilen uyarıyla başka bir görüntü denetleyicisine bastığında şikayet etti. Uyarı en kötüsü değildi, büyük sorun, çocuk gezinti denetleyicisinin temsilcisinin artık aranmamasıydı. Weired.