将对象从领域数据库传输到另一个UITabBar控制器

问题描述 投票:0回答:1

告诉我,我正在尝试解决使用Realm数据库将类的实例传输到另一个控制器的问题。

我有一个主控制器,该控制器根据模型存储以下数据:

class Route: Object {
    @objc dynamic var routeImage: Data?
    @objc dynamic var routeName: String?
    @objc dynamic var numberOfPersons = 0.0
    @objc dynamic var dateOfDeparture: String?
    @objc dynamic var dateOfArrival: String?
    let placeToVisit = List<Place>()
    let person = List<Person>()
}

在我需要向其传输数据的控制器中创建

var currentRoute: Route!

在情节提要中,我从控制器单元到UITabBar指定了标识符“ showDetail”,并在主控制器中创建了一个方法:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showDetail" {
       guard let indexPath = tableView.indexPathForSelectedRow else {return}

       let newPlaceVC = segue.destination as! InformationViewController
           newPlaceVC.currentRoute = routes[indexPath.row]
    }
}

我得到的错误:

The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
Could not cast value of type 'UITabBarController' (0x111ed8b10) to 'Organizer_Tourist.InformationViewController' (0x108dd0a70).
2019-10-07 14:30:35.626853+0800 Organizer Tourist[5467:2618892] Could not cast value of type 'UITabBarController' (0x111ed8b10) to 'Organizer_Tourist.InformationViewController' (0x108dd0a70).
(lldb) 

但是无效,点击单元格,应用程序将崩溃。我想如果没有tabBar而是一个常规表视图控制器,这将起作用。我一直在寻找解决方案,而我遇到的只是通过单例实现。现在我有很多问题,但这真的是正确的决定吗?人们说这违反了应用程序的“模块化”并带来了自己的问题。问题是如何通过单例完成?要考虑什么,从哪里开始?哪种方法值得编辑?

ios swift xcode realm uitabbar
1个回答
0
投票

无法转换类型为'UITabBarController'的值

您正在尝试将segue.destination转换为错字InformationViewController,不是。

如果将InformationViewController嵌入到UITabBarController中,则需要转换为UITabBarController而不是InformationViewController

尝试这样的事情:

if segue.identifier == "showDetail" { guard let indexPath = tableView.indexPathForSelectedRow else { return } let tabBarController = segue.destination as! UITabBarController UserSelectedRoute.shared.selectedRoute = routes[indexPath.row] }

如果要将当前选定的路线传递到InformationViewController,则可以创建将保留当前路线的单例对象

final class UserSelectedRoute {

    private init() { }

    static var shared = UserSelectedRoute()

    var selectedRoute: Route?
}

然后在您的InformationViewController中可以输入类似以下内容:

var currentRoute = UserSelectedRoute.shared.selectedRoute

希望这对您有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.