如何修复线程1:异常:NSSingleObjectArrayI objectAtIndex ::索引1超出范围[0 .. 0]

时间:2020-10-09 07:46:13

标签: ios swift xcode error-handling uitabbarcontroller

如果我等到fetchUser()完成viewDidLoad()的加载后,将图像添加到自定义选项卡中,我就绝​​迹了

func fetchUser() {
        
        guard let username = UserDefaults.standard.string(forKey: "name") else {return}
        guard let uid = Auth.auth().currentUser?.uid else {return}
        let userRef = Database.database().reference(withPath: "users").child(uid)
        
        userRef.observeSingleEvent(of: .value, with: { (snapshot) in
            
            let value = snapshot.value as? NSDictionary
            self.usernameLable.text = username
            guard let profileImageUrl = value?["profileImageUrl"] as? String else {return}
            guard let url = URL(string: profileImageUrl) else { return }
            
            URLSession.shared.dataTask(with: url) { (data, response, err) in
                if let err = err {
                    print("unable to get profile image", err)
                }
                
                guard let data = data else {return}
                let image = UIImage(data: data)
                
                DispatchQueue.main.async {
                    self.ProfileImg.image = image
                    
                    self.tabBarController?.addSubviewToLastTabItem(image!.withRenderingMode(.alwaysOriginal))
                }
                
            }.resume()
            
          }) { (err) in
              print("fail to fetch user", err)
          }
        
    }

但是,如果我用胶带贴在另一个标签栏项上,我将收到此错误Thread 1: Exception: "*** -[__NSSingleObjectArrayI objectAtIndex:]: index 1 beyond bounds [0 .. 0],应用程序将崩溃,并且我只是想办法确定问题是否在这里self.tabBarController?.addSubviewToLastTabItem(image!.withRenderingMode(.alwaysOriginal)),我想我没有以正确的方式添加图片

enter image description here

extension UITabBarController {
    
    
    func addSubviewToLastTabItem(_ imageName: UIImage) {
        let lastTabBarButton = self.tabBar.subviews[1]
        let tabItemImageView = lastTabBarButton.subviews[1]
            if let accountTabBarItem = self.tabBar.items?.first {
                accountTabBarItem.selectedImage = nil
                accountTabBarItem.image = nil
            }
        
            self.tabBar.unselectedItemTintColor = UIColor.lightGray
            let imgView = UIImageView()
            imgView.image?.withRenderingMode(.alwaysOriginal)
            imgView.frame = tabItemImageView.frame
            imgView.layer.cornerRadius = tabItemImageView.frame.height/2
            imgView.layer.masksToBounds = true
            imgView.contentMode = .scaleAspectFill
            imgView.clipsToBounds = true
            imgView.image = imageName
            self.tabBar.subviews.last?.addSubview(imgView)
        }
    }

0 个答案:

没有答案