Ios ';UIViewController';不是'的子类型;ViewController';

Ios ';UIViewController';不是'的子类型;ViewController';,ios,iphone,swift,uitableview,uiviewcontroller,Ios,Iphone,Swift,Uitableview,Uiviewcontroller,我正在使用一个选项卡栏控制器,并尝试从另一个选项卡栏视图控制器访问默认值。我在另一个函数中尝试了这个功能,如下所示,它工作得很好,但由于某些原因,它在这里不起作用。无论何时调用它,它都会显示错误:FirstViewController()。默认值。有人知道为什么会这样吗 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{

我正在使用一个选项卡栏控制器,并尝试从另一个选项卡栏视图控制器访问默认值。我在另一个函数中尝试了这个功能,如下所示,它工作得很好,但由于某些原因,它在这里不起作用。无论何时调用它,它都会显示错误:
FirstViewController()。默认值
。有人知道为什么会这样吗

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{

            let cell = TableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as UITableViewCell
            TableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
            var photo: Photo
            let description = FirstViewController().description

            if(searchController.isActive){
                photo = self.filteredPhotos[indexPath.row]
            } else {
                photo = self.photosArray[indexPath.row]
            }
            cell.textLabel!.text = photo.name
            if(FirstViewController().defaults.data(forKey: photo.name + "image") as UIImage != nil){
                cell.imageView?.image = FirstViewController().defaults.data(forKey: photo.name + "image") as UIImage
            }
            print(photo.name)
            print("TableView2Finished")
            return cell
        }

您需要引用FirstViewController的实例,而不是实际的类定义

与此相反:

if(FirstViewController().defaults.data(forKey: photo.name + "image") as UIImage != nil) {
    cell.imageView?.image = FirstViewController().defaults.data(forKey: photo.name + "image") as UIImage
}
试试这个:

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let firstViewController = storyboard.instantiateViewController(withIdentifier: "FirstViewController") as! FirstViewController
if(firstViewController.defaults.data(forKey: photo.name + "image") as UIImage != nil) {
    cell.imageView?.image = firstViewController.defaults.data(forKey: photo.name + "image") as UIImage
}
确保为FirstViewController设置了
情节提要标识符
,以便可以通过代码中的标识符引用它

编辑#1:

或者,您可以将字符串名称保存到
UserDefaults
并以这种方式访问它

在第一个视图控制器中:

let defaults = UserDefaults.standard
defaults.set(photo.name, forKey: "FirstImage")
在表视图控制器中:

let defaults = UserDefaults.standard
if let myImage = defaults.object(forKey: "FirstImage") as? String {
    cell.imageView?.image = UIImage(named: myImage!)
}

您需要引用FirstViewController的实例,而不是实际的类定义

与此相反:

if(FirstViewController().defaults.data(forKey: photo.name + "image") as UIImage != nil) {
    cell.imageView?.image = FirstViewController().defaults.data(forKey: photo.name + "image") as UIImage
}
试试这个:

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let firstViewController = storyboard.instantiateViewController(withIdentifier: "FirstViewController") as! FirstViewController
if(firstViewController.defaults.data(forKey: photo.name + "image") as UIImage != nil) {
    cell.imageView?.image = firstViewController.defaults.data(forKey: photo.name + "image") as UIImage
}
确保为FirstViewController设置了
情节提要标识符
,以便可以通过代码中的标识符引用它

编辑#1:

或者,您可以将字符串名称保存到
UserDefaults
并以这种方式访问它

在第一个视图控制器中:

let defaults = UserDefaults.standard
defaults.set(photo.name, forKey: "FirstImage")
在表视图控制器中:

let defaults = UserDefaults.standard
if let myImage = defaults.object(forKey: "FirstImage") as? String {
    cell.imageView?.image = UIImage(named: myImage!)
}

欢迎来到堆栈溢出!你能详细说明你的代码是如何“不工作”的吗?你在期待什么,到底发生了什么?如果您遇到异常/错误,请发布发生该异常/错误的行以及异常/错误详细信息。请输入这些详细信息,否则我们可能无法提供帮助。您正在尝试访问类FirstViewController上的默认值,而不是FirstViewController实例上的默认值。这是故意的吗?你真的知道区别是什么吗?欢迎来到Stack Overflow!你能详细说明你的代码是如何“不工作”的吗?你在期待什么,到底发生了什么?如果您遇到异常/错误,请发布发生该异常/错误的行以及异常/错误详细信息。请输入这些详细信息,否则我们可能无法提供帮助。您正在尝试访问类FirstViewController上的默认值,而不是FirstViewController实例上的默认值。这是故意的吗?你真的意识到区别是什么吗?