从另一个视图控制器访问变量。迅速
Posted
技术标签:
【中文标题】从另一个视图控制器访问变量。迅速【英文标题】:Access a variable from another view controller. Swift 【发布时间】:2016-04-30 00:38:49 【问题描述】:如果有人向我发送消息并且我在特定的视图控制器 (ConversationViewController) 中,我会尝试显示通知。现在,我可以显示通知,但是当我尝试访问 ConversationViewController 中的变量(otherProfileName)时,它是 nil。我猜这是因为该变量(otherProfileName)是从另一个视图控制器传递的。我确信该变量已成功传递。一切正常,可以显示通知并打印“hi”,但变量为零。有什么建议可以解决吗?
对话视图控制器
// passed from another view controller
var otherProfileName = String()
appDelegate
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void)
if application.applicationState == UIApplicationState.Active
print(topViewController())
if topViewController() is ConversationViewController
let myCustomViewController: ConversationViewController = ConversationViewController(nibName: nil, bundle: nil)
print(myCustomViewController.otherProfileName)
print("HI")
HDNotificationView.showNotificationViewWithImage(nil, title: "HI", message: "HHIHI", isAutoHide: true)
completionHandler(UIBackgroundFetchResult.NewData)
func topViewController(base: UIViewController? = UIApplication.sharedApplication().keyWindow?.rootViewController) -> UIViewController?
if let MMDrawers = base as? MMDrawerController
for MMDrawer in MMDrawers.childViewControllers
return topViewController(MMDrawer)
if let nav = base as? UINavigationController
return topViewController(nav.visibleViewController)
if let tab = base as? UITabBarController
if let selected = tab.selectedViewController
return topViewController(selected)
if let presented = base?.presentedViewController
return topViewController(presented)
return base
【问题讨论】:
【参考方案1】:这段代码没有意义:
if topViewController() is ConversationViewController
let myCustomViewController: ConversationViewController = ConversationViewController(nibName: nil, bundle: nil)
翻译:
“如果顶部视图控制器是 ConversationViewController,则创建一个新的 ConversationViewController 空实例,并询问该实例的 otherProfileName 值”
这就像在一组盒子中寻找蓝色盒子,因为您知道它包含一个苹果。当你找到一个蓝色盒子时,去建造一个新的空蓝色盒子,打开它,想知道为什么里面没有你的苹果。
【讨论】:
因为我想检查当前其他(otherProfileName)是否与给我发消息的人匹配。 类似于 if userInfo["(other)"] == otherProfileName then match;否则,不匹配 你完全错过了我回答的重点。如果顶视图控制器是ConversationViewController
,您将创建一个全新的空ConversationViewController
,其中没有任何值,并尝试从新创建的空视图控制器中提取值。跨度>
类比 #2:我把钱包留在了 Prius 的手套箱里。去街上看看。如果我找到一辆普锐斯,就去买一辆相同颜色的新普锐斯,然后想知道为什么新普锐斯的手套箱里没有我的钱包。这就是你正在做的事情。
哦。我明白你的意思了。让 myCustomViewController: ConversationViewController = ConversationViewController(nibName: nil, bundle: nil)。那是指原始的conversationViewController。我以为它指的是我目前正在使用的那个。感谢您的帮助。【参考方案2】:
您正在这里创建 ConversationViewController 的新实例
let myCustomViewController: ConversationViewController = ConversationViewController(nibName: nil, bundle: nil)
试试
if let myCustomViewController = topViewController() as? ConversationViewController
print(myCustomViewController.otherProfileName)
print("HI")
HDNotificationView.showNotificationViewWithImage(nil, title: "HI", message: "HHIHI", isAutoHide: true)
【讨论】:
以上是关于从另一个视图控制器访问变量。迅速的主要内容,如果未能解决你的问题,请参考以下文章