Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将对象从领域数据库传输到另一个UITabBar控制器_Ios_Swift_Xcode_Realm_Uitabbar - Fatal编程技术网

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

Ios 将对象从领域数据库传输到另一个UITabBar控制器,ios,swift,xcode,realm,uitabbar,Ios,Swift,Xcode,Realm,Uitabbar,请告诉我,我正在尝试解决使用领域数据库将一个类的实例传输到另一个控制器的问题 我有一个主控制器,它根据模型存储对象和以下数据: 类路由:对象{ @objc动态var路由图像:数据? @objc动态变量routeName:字符串? @objc动态变量numberOfPersons=0.0 @objc动态变量DateOfParture:字符串? @objc动态变量dateOfArrival:字符串? 让placeToVisit=List() let person=List() } 在我需要将此数据

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

我有一个主控制器,它根据模型存储对象和以下数据:

类路由:对象{
@objc动态var路由图像:数据?
@objc动态变量routeName:字符串?
@objc动态变量numberOfPersons=0.0
@objc动态变量DateOfParture:字符串?
@objc动态变量dateOfArrival:字符串?
让placeToVisit=List()
let person=List()
}
在我需要将此数据传输到的控制器中,我创建了

var currentRoute:路由!
在故事板中,我指定了从控制器单元格到UITabBar的标识符“showDetail”,并在主控制器中创建了一个方法:

override func prepare(对于segue:UIStoryboardSegue,发送方:Any?){
如果segue.identifier==“showDetail”{
guard let indexPath=tableView.indexPathForSelectedRow else{return}
将newPlaceVC=segue.destination设为!InformationViewController
newPlaceVC.currentRoute=路由[indexPath.row]
}
}
我得到的错误是:

中列出的UIView上UIConstraintBasedLayoutDebugging类别中的方法也可能有用。 无法将类型为“UITabBarController”(0x111ed8b10)的值强制转换为“Organizer\u游客信息视图控制器”(0x108dd0a70)。 2019-10-07 14:30:35.626853+0800组织者-游客[5467:2618892]无法将类型为“UITabBarController”(0x111ed8b10)的值强制转换为“组织者-游客信息视图控制器”(0x108dd0a70)。 (lldb)
但它是无效的,应用程序因点击单元格而崩溃。我想如果没有一个选项卡栏,而是一个常规的表、视图控制器,这将是可行的。我一直在寻找解决方案,我所遇到的只是通过singleton实现。现在我有很多问题,但这真的是正确的决定吗?人们说这违反了应用程序的“模块化”,并带来了自身的问题。问题是如何通过singleton实现这一点?要考虑什么,从哪里开始?哪个方法值得编辑?

错误说明发生了什么:

无法强制转换“UITabBarController”类型的值

您正试图将
segue.destination
转换为键入
InformationViewController
,但实际情况并非如此

如果将
InformationViewController
嵌入
uitabarcontroller
中,则需要强制转换到
uitabarcontroller
而不是
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


希望这对您有所帮助

当您点击单元格时,错误会显示什么?请在问题中添加错误消息。在UIViewAlertForUnsatifiableConstraints处创建一个符号断点,以便在调试器中捕获此消息。中列出的UIView上UIConstraintBasedLayoutDebugging类别中的方法也可能会有所帮助。无法将类型为“UITabBarController”(0x111ed8b10)的值强制转换为“Organizer\u游客信息视图控制器”(0x108dd0a70)。2019-10-07 14:30:35.626853+0800组织者-游客[5467:2618892]无法将类型为“UITabBarController”(0x111ed8b10)的值强制转换为“组织者-游客信息视图控制器”(0x108dd0a70)。(lldb)这是否意味着我需要为tabbar类创建一个新文件并指定该类的目标?现在我有5个视图控制器,它们包含在tabBar中,但我没有描述tabBar的文件。我可以指定segue.destination为!例如“TabBarController”@StGregor1996我编辑我的答案,只需转换到
uitabarcontroller
它应该可以正常工作,但我有新的错误=(类型为“UITabBarController”的值没有成员“currentRoute”我发现一个问题,我添加了Singleton对象的基本示例我遵循了您的所有建议,但我在InformationViewController=(意外发现为零…我尝试从数据库获取对象并将新值附加到属性placeToVisite()中)在另一个VC中,值是输入错误的位置
final class UserSelectedRoute {

    private init() { }

    static var shared = UserSelectedRoute()

    var selectedRoute: Route?
}