iOS Swift3 ViewController obyekti uchun nil qiymatini tekshiring

let viewControllers: [UIViewController] = self.navigationController!.viewControllers

for VC  in viewControllers  {            
    if (VC.isKind(of: HomeViewController.self)) {            
         bScreen = true
         self.navigationController?.popToViewController(VC, animated: true)
     }
}

if bScreen == false {
    let homeVC = HomeViewController()
    self.navigationController?.pushViewController(homeVC, animated: false)
}

Men HomeViewController.above kodiga o'tish uchun navigatsiya nazoratchisi qatoridan foydalanib, fine.some marta ishlayapman. "Muhim xato: kutilmagan tarzda nolni Opsiyonel qiymatdan ochish vaqtida topdingiz" deb bilaman. Ushbu halokat sababini bilaman. nil qiymatini tekshirish uchun ob'ektni tekshirish uchun ob'ektni tekshirish. Ko'pgina yordamlar qadrlanadi

0
Qaysi yo'lda siz qulaguningiz?
qo'shib qo'ydi muallif dahiya_boy, manba
@arunrajesh Men buni mumkin emas deb o'ylamayman, chunki agar vc nil bo'lsa, unda if ifoda ichiga kirmaydi. kindOf o'rniga - kodini sinab ko'ring.
qo'shib qo'ydi muallif dahiya_boy, manba
@arunrajesh Men buni mumkin emas deb o'ylamayman, chunki agar vc nil bo'lsa, unda if ifoda ichiga kirmaydi. kindOf o'rniga - kodini sinab ko'ring.
qo'shib qo'ydi muallif dahiya_boy, manba
@arunrajesh Men buni mumkin emas deb o'ylamayman, chunki agar vc nil bo'lsa, unda if ifoda ichiga kirmaydi. kindOf o'rniga - kodini sinab ko'ring.
qo'shib qo'ydi muallif dahiya_boy, manba
Qaysi yo'lda siz qulaguningiz?
qo'shib qo'ydi muallif dahiya_boy, manba
Buni harakat qilib ko'ring: agar vc HomeViewController bo'lsa
qo'shib qo'ydi muallif Harshal Valanda, manba
Siz tezkor 3 dan foydalanasiz
qo'shib qo'ydi muallif Harshal Valanda, manba
Buni harakat qilib ko'ring: agar vc HomeViewController bo'lsa
qo'shib qo'ydi muallif Harshal Valanda, manba
qo'shib qo'ydi muallif Harshal Valanda, manba
Buni harakat qilib ko'ring: agar vc HomeViewController bo'lsa
qo'shib qo'ydi muallif Harshal Valanda, manba
qo'shib qo'ydi muallif Harshal Valanda, manba
qo'shib qo'ydi muallif Harshal Valanda, manba
@arunrajesh siz hikoyani ishlatasiz?
qo'shib qo'ydi muallif Hardik Shekhat, manba
@arunrajesh siz hikoyani ishlatasiz?
qo'shib qo'ydi muallif Hardik Shekhat, manba
@arunrajesh siz hikoyani ishlatasiz?
qo'shib qo'ydi muallif Hardik Shekhat, manba
Ha ... bu "self.navigationController? .popToViewController (VC, jonlantirilgan: rost)" da buzilib ketmoqda
qo'shib qo'ydi muallif arun rajesh, manba
Ha ... bu "self.navigationController? .popToViewController (VC, jonlantirilgan: rost)" da buzilib ketmoqda
qo'shib qo'ydi muallif arun rajesh, manba
nil qiymatini tekshirish uchun uni sinab ko'rdim.
qo'shib qo'ydi muallif arun rajesh, manba
nil qiymatini tekshirish uchun uni sinab ko'rdim.
qo'shib qo'ydi muallif arun rajesh, manba
nil qiymatini tekshirish uchun uni sinab ko'rdim.
qo'shib qo'ydi muallif arun rajesh, manba
Men hikoyani ishlatmayman ..
qo'shib qo'ydi muallif arun rajesh, manba
Men hikoyani ishlatmayman ..
qo'shib qo'ydi muallif arun rajesh, manba
Men hikoyani ishlatmayman ..
qo'shib qo'ydi muallif arun rajesh, manba

12 javoblar

let getCurrentVCIndex = self.navigationController?.viewControllers.indexOf({ (viewController) -> Bool in

if let _ = viewController as? HomeViewController {
    return true
}
return false
})


if  getCurrentVCIndex
 {
let HomeVC = self.navigationController?.viewControllers[getCurrentVCIndex!] as! HomeViewController

self.navigationController?.popToViewController(HomeVC, animated: true)
}
else
  {
//use push
}

yoki kabi foydalaning

if  let  HomeVC =  self.navigationController?.viewControllers.filter({$0 is HomeViewController}).first
{
self.navigationController?.popToViewController(HomeVC!, animated: true)
}else
{
 //use push
}
1
qo'shib qo'ydi
let getCurrentVCIndex = self.navigationController?.viewControllers.indexOf({ (viewController) -> Bool in

if let _ = viewController as? HomeViewController {
    return true
}
return false
})


if  getCurrentVCIndex
 {
let HomeVC = self.navigationController?.viewControllers[getCurrentVCIndex!] as! HomeViewController

self.navigationController?.popToViewController(HomeVC, animated: true)
}
else
  {
//use push
}

yoki kabi foydalaning

if  let  HomeVC =  self.navigationController?.viewControllers.filter({$0 is HomeViewController}).first
{
self.navigationController?.popToViewController(HomeVC!, animated: true)
}else
{
 //use push
}
1
qo'shib qo'ydi

- Swift 3 -

for vc in (self.navigationController?.viewControllers)! {
     if vc is HomeViewController {
        _ = self.navigationController?.popToViewController(vc, animated: true)
     }
}
1
qo'shib qo'ydi

Hech qachon to'g'ridan-to'g'ri ! foydalanmang, chunki u sizni nol bo'lmasligiga amin bo'lasiz. Quyidagi kodni o'zgartiring. Optsiyalarni ochish uchun agar ruxsat berilsa yoki guard let foydalanishingiz mumkin.

    if let viewControllers: [UIViewController] = self.navigationController?.viewControllers {
                for VC  in viewControllers  {

                    if (VC.isKind(of: ViewController.self)) {

                        bScreen = true
                        self.navigationController?.popToViewController(VC, animated: true)
                    }
                }

                if bScreen == false
                {
                    let homeVC = ViewController()
                    self.navigationController?.pushViewController(homeVC, animated: false)
                }
 } 
else {
    //IF VC is nil
}
0
qo'shib qo'ydi
@VarunNaharia Ushbu boshqa qism talab qilinmaydi, lekin kimdir uni qo'shishni xohlasa, yuqoridagi kabi amalga oshirilishi mumkin.
qo'shib qo'ydi muallif Parth Adroja, manba
Boshqa bo'lim kerak emas, deb o'ylayman, lekin hali ham kodga bog'liq.
qo'shib qo'ydi muallif Parth Adroja, manba
Endi siz kodni o'zgartirdingiz
qo'shib qo'ydi muallif Varun Naharia, manba
agar boshqa bir qismi bo'lsa, u asl talabdan boshqacha ishlaydi
qo'shib qo'ydi muallif Varun Naharia, manba
@VarunNaharia agar shart boshqa qism bo'lmasa. Iltimos shartnoma hujjatlarini tekshiring
qo'shib qo'ydi muallif Brijesh Shiroya, manba

Ushbu koddan foydalaning. bu sizga yordam beradi.

let viewControllers: [UIViewController] = self.navigationController!.viewControllers
            for VC  in viewControllers  {
                if (VC.isKind(of: HomeViewController.self)) {
                    bScreen = true
                    self.navigationController?.popToViewController(VC, animated: true)
                    break;
                }
            }

            if bScreen == false
            {
                let homeVC = HomeViewController()
                self.navigationController?.pushViewController(homeVC, animated: false)
            }
0
qo'shib qo'ydi
Men bilaman, lekin javobni yozib qo'yishingiz kerak va kodni yopishtirib qo'ymasligingiz kerak. Agar siz kodingizni diqqat bilan o'rganib chiqsangiz, u erda hech qanday ishlab o'zgarish yo'q, u asl nusxada ishlaydi.
qo'shib qo'ydi muallif Varun Naharia, manba
Ushbu kod haqiqiy koddan farq qilmaydi, iltimos, izohni qo'shing, nima uchun u ishlay oladi deb o'ylaysiz?
qo'shib qo'ydi muallif Varun Naharia, manba
@VarunNaharia. Iltimos, kodni sinchkovlik bilan qo'shib qo'ying
qo'shib qo'ydi muallif Brijesh Shiroya, manba
@VarunNaharia. bu kodni ishlatmasangiz, ba'zida halokat. Lekin agar u uzib qo'ysa, u loopni buzadi va hech qanday falokatlar sodir bo'lmaydi.
qo'shib qo'ydi muallif Brijesh Shiroya, manba

Ushbu koddan foydalaning. bu sizga yordam beradi.

let viewControllers: [UIViewController] = self.navigationController!.viewControllers
            for VC  in viewControllers  {
                if (VC.isKind(of: HomeViewController.self)) {
                    bScreen = true
                    self.navigationController?.popToViewController(VC, animated: true)
                    break;
                }
            }

            if bScreen == false
            {
                let homeVC = HomeViewController()
                self.navigationController?.pushViewController(homeVC, animated: false)
            }
0
qo'shib qo'ydi
Men bilaman, lekin javobni yozib qo'yishingiz kerak va kodni yopishtirib qo'ymasligingiz kerak. Agar siz kodingizni diqqat bilan o'rganib chiqsangiz, u erda hech qanday ishlab o'zgarish yo'q, u asl nusxada ishlaydi.
qo'shib qo'ydi muallif Varun Naharia, manba
Ushbu kod haqiqiy koddan farq qilmaydi, iltimos, izohni qo'shing, nima uchun u ishlay oladi deb o'ylaysiz?
qo'shib qo'ydi muallif Varun Naharia, manba
@VarunNaharia. Iltimos, kodni sinchkovlik bilan qo'shib qo'ying
qo'shib qo'ydi muallif Brijesh Shiroya, manba
@VarunNaharia. bu kodni ishlatmasangiz, ba'zida halokat. Lekin agar u uzib qo'ysa, u loopni buzadi va hech qanday falokatlar sodir bo'lmaydi.
qo'shib qo'ydi muallif Brijesh Shiroya, manba

Ushbu koddan foydalaning. bu sizga yordam beradi.

let viewControllers: [UIViewController] = self.navigationController!.viewControllers
            for VC  in viewControllers  {
                if (VC.isKind(of: HomeViewController.self)) {
                    bScreen = true
                    self.navigationController?.popToViewController(VC, animated: true)
                    break;
                }
            }

            if bScreen == false
            {
                let homeVC = HomeViewController()
                self.navigationController?.pushViewController(homeVC, animated: false)
            }
0
qo'shib qo'ydi
Men bilaman, lekin javobni yozib qo'yishingiz kerak va kodni yopishtirib qo'ymasligingiz kerak. Agar siz kodingizni diqqat bilan o'rganib chiqsangiz, u erda hech qanday ishlab o'zgarish yo'q, u asl nusxada ishlaydi.
qo'shib qo'ydi muallif Varun Naharia, manba
Ushbu kod haqiqiy koddan farq qilmaydi, iltimos, izohni qo'shing, nima uchun u ishlay oladi deb o'ylaysiz?
qo'shib qo'ydi muallif Varun Naharia, manba
@VarunNaharia. Iltimos, kodni sinchkovlik bilan qo'shib qo'ying
qo'shib qo'ydi muallif Brijesh Shiroya, manba
@VarunNaharia. bu kodni ishlatmasangiz, ba'zida halokat. Lekin agar u uzib qo'ysa, u loopni buzadi va hech qanday falokatlar sodir bo'lmaydi.
qo'shib qo'ydi muallif Brijesh Shiroya, manba

Buning oldini olish uchun ixtiyoriy qiymatga ruxsat berish/saqlab qo'yish uchun foydalanish uchun yaxshiroqdir.

if let viewControllers: [UIViewController] = self.navigationController.viewControllers{

        for VC  in viewControllers  {

            if (VC.isKind(of: HomeViewController.self)) {

                bScreen = true
                self.navigationController?.popToViewController(VC, animated: true)
            }
        }

if bScreen == false
        {
            let homeVC = HomeViewController()
            self.navigationController?.pushViewController(homeVC, animated: false)
        }
}
0
qo'shib qo'ydi
Sizning javobingiz uchun kod qisqasi emas, balki ba'zi bir izohlarni qo'shing.
qo'shib qo'ydi muallif user5890979, manba
Bilaman, lekin javobni yozib qo'ying va kodni qo'ying.
qo'shib qo'ydi muallif user5890979, manba
Faqat nil emasligiga ishonch hosil qilish uchun navigatsiya nazorat boshqaruvchisini tekshirib ko'rishga ruxsat bering
qo'shib qo'ydi muallif Anuraj, manba

Buning oldini olish uchun ixtiyoriy qiymatga ruxsat berish/saqlab qo'yish uchun foydalanish uchun yaxshiroqdir.

if let viewControllers: [UIViewController] = self.navigationController.viewControllers{

        for VC  in viewControllers  {

            if (VC.isKind(of: HomeViewController.self)) {

                bScreen = true
                self.navigationController?.popToViewController(VC, animated: true)
            }
        }

if bScreen == false
        {
            let homeVC = HomeViewController()
            self.navigationController?.pushViewController(homeVC, animated: false)
        }
}
0
qo'shib qo'ydi
Sizning javobingiz uchun kod qisqasi emas, balki ba'zi bir izohlarni qo'shing.
qo'shib qo'ydi muallif user5890979, manba
Bilaman, lekin javobni yozib qo'ying va kodni qo'ying.
qo'shib qo'ydi muallif user5890979, manba
Faqat nil emasligiga ishonch hosil qilish uchun navigatsiya nazorat boshqaruvchisini tekshirib ko'rishga ruxsat bering
qo'shib qo'ydi muallif Anuraj, manba

Buning oldini olish uchun ixtiyoriy qiymatga ruxsat berish/saqlab qo'yish uchun foydalanish uchun yaxshiroqdir.

if let viewControllers: [UIViewController] = self.navigationController.viewControllers{

        for VC  in viewControllers  {

            if (VC.isKind(of: HomeViewController.self)) {

                bScreen = true
                self.navigationController?.popToViewController(VC, animated: true)
            }
        }

if bScreen == false
        {
            let homeVC = HomeViewController()
            self.navigationController?.pushViewController(homeVC, animated: false)
        }
}
0
qo'shib qo'ydi
Sizning javobingiz uchun kod qisqasi emas, balki ba'zi bir izohlarni qo'shing.
qo'shib qo'ydi muallif user5890979, manba
Bilaman, lekin javobni yozib qo'ying va kodni qo'ying.
qo'shib qo'ydi muallif user5890979, manba
Faqat nil emasligiga ishonch hosil qilish uchun navigatsiya nazorat boshqaruvchisini tekshirib ko'rishga ruxsat bering
qo'shib qo'ydi muallif Anuraj, manba

Sizning kodingiz asosida, pastadirda, navigatsiya to'plamida tegishli versiya tekshirgichi mavjud bo'lsa, tegishli sahifaga tashlanadi. Ammo, agar ikki xil ko'rinish nazorat birligi mavjud bo'lsa, aynan bir vaqtning o'zida loopni bajarishga olib keladi. Bu falokatga olib kelishi mumkin. Shunday qilib poptoviewcontroller bu muammoni bartaraf etgandan keyin oromgohda qo'shing. Iltimos, quyidagi kodni tekshiring, sizga yordam beradi.

 if (VC.isKind(of: HomeViewController.self)) {

                bScreen = true
                self.navigationController?.popToViewController(VC, animated: true)
                break
            }
0
qo'shib qo'ydi

Sizning kodingiz asosida, pastadirda, navigatsiya to'plamida tegishli versiya tekshirgichi mavjud bo'lsa, tegishli sahifaga tashlanadi. Ammo, agar ikki xil ko'rinish nazorat birligi mavjud bo'lsa, aynan bir vaqtning o'zida loopni bajarishga olib keladi. Bu falokatga olib kelishi mumkin. Shunday qilib poptoviewcontroller bu muammoni bartaraf etgandan keyin oromgohda qo'shing. Iltimos, quyidagi kodni tekshiring, sizga yordam beradi.

 if (VC.isKind(of: HomeViewController.self)) {

                bScreen = true
                self.navigationController?.popToViewController(VC, animated: true)
                break
            }
0
qo'shib qo'ydi