告诉我,我正在尝试解决使用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而是一个常规表视图控制器,这将起作用。我一直在寻找解决方案,而我遇到的只是通过单例实现。现在我有很多问题,但这真的是正确的决定吗?人们说这违反了应用程序的“模块化”并带来了自己的问题。问题是如何通过单例完成?要考虑什么,从哪里开始?哪种方法值得编辑?
无法转换类型为'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
希望这对您有帮助!