将对象从 Realm 数据库传输到另一个 UITabBar 控制器
Posted
技术标签:
【中文标题】将对象从 Realm 数据库传输到另一个 UITabBar 控制器【英文标题】:Transferring an object from a Realm database to another UITabBar controller 【发布时间】:2019-10-07 05:54:59 【问题描述】:请告诉我,我正在尝试解决使用 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!
在 Storyboard 中,我指定了从控制器单元到 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 而是常规表视图控制器,这将起作用。我一直在寻找解决方案,但我遇到的只是通过单例实现。现在我有很多问题,但这真的是正确的决定吗?人们说这违反了应用程序的“模块化”并带有其自身的问题。问题是这是如何通过单例完成的?要考虑什么,从哪里开始?哪种方法值得修改?
【问题讨论】:
当您点击单元格时,错误说明了什么?请在您的问题中添加错误消息。 在 UIViewAlertForUnsatisfiableConstraints 创建一个符号断点,以便在调试器中捕获它。错误说明发生了什么:
无法转换“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
希望对您有所帮助!
【讨论】:
是否意味着我需要为tabbar类创建一个新文件并为这个类指定目标?现在我有 5 个视图控制器,它们包含在 tabBar 中,但我没有描述 tabBar 的文件。我可以将 segue.destination 指定为!例如“TabBarController”? @StGregor1996 我编辑了我的答案,只需转换为UITabBarController
它应该可以正常工作
好的,但是我有新的错误=('UITabBarController'类型的值没有成员'currentRoute'
我看到一个问题,我添加了 Singleton 对象的基本示例
我遵循了您的所有建议,但在 InformationViewController =( Unexpectedly found nil ... 我尝试从数据库中获取对象并将新值附加到属性 placeToVisit以上是关于将对象从 Realm 数据库传输到另一个 UITabBar 控制器的主要内容,如果未能解决你的问题,请参考以下文章