Saya mengalami masalah ini ketika saya mensimulasikan aplikasi saya, ini bukan kesalahan atau peringatan tetapi muncul di konsol saya, apakah ada yang pernah mengalami ini sebelumnya?
Saya mengalami masalah ini ketika saya mensimulasikan aplikasi saya, ini bukan kesalahan atau peringatan tetapi muncul di konsol saya, apakah ada yang pernah mengalami ini sebelumnya?
Jawaban:
Dalam kasus saya, kesalahan ini terjadi ketika Anda mengklik dua tab dalam tampilan tabel dengan sangat cepat.
Hasilnya menyebabkan nama judul salah, tombol kembali menghilang. Seseorang menyebutkan bahwa ketika Anda mendorong pandangan set animated:NO
,. Kesalahan akan hilang tetapi masih menyebabkan beberapa perilaku aneh. Ini mendorong dua tampilan, lalu Anda harus mundur dua kali untuk kembali ke layar tampilan tabel.
Metode yang saya coba untuk menyelesaikan masalah ini:
Menambahkan BOOL cellSelected;
di viewWillAppear
cellSelected = YES;
dalam delegasi didselectcell if (cellSelected){cellSelected = NO; do action ; }
Ini membantu mencegah mengklik dua sel berbeda dengan sangat cepat.
Dalam kasus saya itu terjadi ketika saya dipicu [self performSegueWithIdentifier:@"SomeIdentifier" sender:self];
dalam metode UINavigationController
item viewDidLoad
.
Memindahkannya ke dalam viewDidAppear
metode memecahkan masalah.
Alasannya sangat mungkin adalah bahwa viewDidLoad
tidak semua animasi mewah sudah selesai, sedangkan viewDidAppear
semuanya sudah selesai.
Saya punya masalah ini juga. Saya menemukan dua solusi untuk masalah ini:
UINavigationController
tempat masalah ini teratasi. Pengontrol Navigasi BufferedAnda harus menjalankan kode Anda di loop yang berbeda untuk menghindari ini
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
antrian utama. Hal tentang dispatch_async
itu menunggu sampai semua animasi lain di antrian utama selesai. itu jauh lebih baik daripada menggunakan penundaan karena: 1- Anda tidak akan pernah tahu apakah penundaan sudah cukup, itu tergantung pada perangkat host Anda 2- Anda akan berakhir dengan penundaan berlebihan dan sesuatu akan tertinggal. coba ini:dispatch_async(dispatch_get_main_queue(), ^{[self presentViewController:self.yourModalVC animated:YES completion:nil];});
Saya punya banyak masalah dengan masalah yang sama. Saya menyelesaikan ini dengan cara ini
1) Anda tidak menggunakan UIViewController's
penginisialisasi yang ditunjuk initWithNibName:bundle:
. Coba gunakan, bukan hanya init
.
2) diatur animated:YES
ke TIDAK, dan itu memecahkan masalah. misalnya.[self.navigationController pushViewController: viewController_Obj animated:NO];
Saya memiliki masalah yang sama menggunakan pengontrol navigasi dan mendorong pengontrol lain ke sana. Saya mencoba menggunakan Buffered Navigation Controller dan beberapa pendekatan lainnya, tetapi tidak berhasil untuk saya. Setelah menghabiskan beberapa waktu untuk mengetahuinya, saya perhatikan bahwa masalah ini terjadi jika Anda mencoba mendorong pengontrol tampilan baru saat transaksi sebelumnya (animasi) sedang berlangsung (kira-kira durasi 0,5 detik). Bagaimanapun, saya membuat solusi cepat dengan mendelegasikan pengontrol navigasi dan menunggu animasi sebelumnya selesai.
Pastikan Anda tidak lupa di -viewWillAppear, -viewDidAppear, -viewDidLoad, -viewWillDisappear, -viewDidDisappear untuk memanggil metode super yang tepat dalam kelebihan metode Anda. Misalnya dalam kasus saya, saya tidak cocok dengan nama metode seperti ini:
-(void)viewDidAppear
{
[super viewDidDisappear];
//some code staff
..
}
perhatikan bahwa metode muncul dan menghilang tidak cocok
super.viewWillAppear()
dalam viewDidDisappear()
.
'Panggilan tidak seimbang untuk memulai / mengakhiri transisi tampilan'
Mengatakan animasi dimulai sebelum animasi terkait terakhir tidak selesai. Jadi, apakah Anda memunculkan pengontrol tampilan sebelum mendorong yang baru? Atau mungkin muncul ke root? jika ya coba lakukan tanpa animasi yaitu[self.navigationController popToRootViewControllerAnimated:NO];
Dan lihat apakah ini menyelesaikan masalah, Dalam kasus saya ini berhasil.
Saya mendapat masalah ini karena saya memanggil UIPrintInteractionController dari viewController tanpa UITabbar, dan juga UINavigationBar. Tampaknya UIPrintInteractionController tidak mendapatkan printInteractionControllerParentViewController yang benar. Menerapkan metode dalam delegasi dan mengembalikan rootViewController saat ini berhasil untuk saya.
- (UIViewController*)printInteractionControllerParentViewController:(UIPrintInteractionController*)printInteractionController;
Saya memiliki masalah serupa yang melibatkan memutar ulang dialog modal. Posting solusinya di sini ...
https://stackoverflow.com/a/38795258/324479
[Masalah]
Nav Controller -> VC1 -Push -> VC2 -PopOver atau Modal Segue -> VC3.
VC3 melepas kembali ke VC1.
Ketika Segue dari VC2 ke VC3 adalah PopOver dan Modal, pelepasan berakhir dengan peringatan: Panggilan tidak seimbang untuk memulai / mengakhiri transisi tampilan untuk UIViewController "
Jika Segue dari VC ke VC didorong, peringatan itu hilang.
[Larutan]
Akan lebih bagus jika logika santai akan menangani ini. Mungkin itu bug, mungkin tidak. Apa pun caranya, solusinya adalah menjadikan VC2 (Pengontrol yang memiliki munculan) sebagai target mundur, lalu tunggu hingga selesai muncul sebelum memunculkan pengontrol nav. Itu memastikan animasi mundur (popup terbalik) memiliki cukup waktu untuk menyelesaikan sebelum bergerak mundur lebih jauh. Bahkan dengan animasi mati, itu masih harus menunggu atau Anda mendapatkan kesalahan.
Kode Anda untuk VC2 harus sebagai berikut. (Cepat)
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)
}
}
}
Situasi ini dapat terjadi jika Anda menambahkan tampilan dengan pengontrol tampilan modal sebagai tampilan sub. Terbaik untuk digunakan:
-(void) viewDidAppear:(BOOL)animated {
[self presentViewController:self.yourModalVC animated:YES completion:nil];
}
Ini pada dasarnya mengatakan bahwa siklus hidup tampilan tidak efisien untuk viewControllers yang Anda coba tampilkan kemudian.
Saya memiliki masalah serupa saat mencoba melakukan:
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:2] animated:YES];
dalam fungsi seperti - (void) popUpToLevelTwo;
, dan untuk meletakkan return;
di akhir fungsi memecahkan masalah
saya memiliki masalah yang sama ketika saya menggunakan metode pop navigationcontroller Dalam aplikasi saya, saya menggunakan logika terpisah untuk pengontrol navigasi, Jadi hindari penggunaan bilah navigasi dan selalu tersembunyi. Kemudian saya menggunakan tampilan dan pemberitahuan khusus untuk menangani tombol belakang dan kejadiannya. pengamat notifikasi terdaftar dan dan tidak dihapus. Jadi, notifikasi terpicu dua kali, dan itu menciptakan kesalahan yang disebutkan di atas. Periksa kode Anda secara menyeluruh untuk mengetahui kesalahan seperti itu
Untuk apa nilainya, saya mendapatkan kesalahan yang sama ini ketika tidak menyertakan panggilan ke [super viewDidLoad:animated]
dalam viewDidLoad
penggantian saya .
Saya juga mengalami masalah ini ketika saya mengetuk tombol dari NIB. Ternyata saya tidak sengaja menghubungkan tombol untuk mengirim acara ke dua metode IBAction, yang masing-masing melakukan pushViewController: animated:
Saya memiliki beberapa logika yang diimplementasikan untuk menunggu mendorong UIViewController
hingga semua data diunduh. Terjadi kesalahan dalam logika ini yang menyebabkan mendorongUIViewController
terlalu awal sementara masih ada panggilan API lain yang sedang berlangsung.
Itu menyebabkan hal yang sama UIViewController
didorong dua kali oleh UINavigationController
dan memberikan peringatan ini.
Alasan Untuk pesan: Pesan ini bisa ditampilkan jika dan hanya jika Anda mendorong / menyajikan View controller lain dari viewWillAppear
, loadView
, init
atau viewDidLoad
metode arus View Controller
Cara untuk Menghapus Pesan kesalahan: Pindahkan kode mendorong / presentasi Anda ke viewDidAppear
metode akan menyelesaikan masalah
Cepat 4
Masalah saya adalah bahwa saya mempresentasikan VC lain sebelum VC saya yang sekarang selesai dirender.
Solusinya adalah menyajikan VC saya berikutnya setelah penundaan yang cepat.
APA YANG HARUS ANDA JANGAN LAKUKAN
override func viewDidLoad() {
super.viewDidLoad()
self.present(MyNextVC(), animated: true, completion: nil)
}
APA YANG HARUS ANDA LAKUKAN
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)
}
Saya mengalami masalah ini ketika saya lupa mengatur Break; setelah mendorong tampilan dalam pernyataan switch!
Seperti di sini:
case 1:{
SomeViewController *someViewController = [[SomeViewController alloc]initWithNibName:@"SomeViewController" bundle:Nil];
[self.navigationController pushViewController:someViewController animated:YES];
[someViewController release];
}
break; //Forgetting to set break here:
salah satu solusinya adalah,
[NSTimer scheduledTimerWithTimeInterval:0.05(or as required) target:self
selector:@selector(your_selector_method_to_push_the_view) userInfo:nil repeats:NO];
Anda dapat mengalami ini jika Anda mencoba menutup UIViewController sebelum selesai memuat.
Saya memiliki pesan ini di konsol dan berfokus sepenuhnya pada UIViewController yang menghadirkan UIViewController baru, tanpa hasil. Saya akhirnya menemukan masalahnya ada di UIViewController yang saya tunjukkan sedang ditutup sendiri karena pengguna tidak masuk ke akun mereka.
Semoga ini bisa membantu seseorang.
Ini adalah hal yang sulit bagi saya: Saya telah menimpa
override func shouldAutomaticallyForwardRotationMethods() -> Bool {
return true
}
tanpa menimpa:
override func shouldAutomaticallyForwardAppearanceMethods() -> Bool {
return true
}
di pengontrol navigasi akar jendela saya. kemudian pengontrol navigasi anak mengeluh saat mendorong pengontrol tampilan lain dengan peringatan yang disebutkan di atas. Peringatan itu bukan yang terburuk, masalah besarnya adalah, bahwa di sana delegasi pengontrol navigasi anak tidak dipanggil lagi. lelah.