gpt4 book ai didi

objective-c - 使用 Storyboard 从任何 View 执行到初始 View 的转换

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:19:33 25 4
gpt4 key购买 nike

我正在使用 Storyboard开发应用程序。此应用程序要求用户登录。

Storyboard 初始有一个登录 View 。当登录正常时,​​它会执行到 TabViewController 的 segue。

在对 API 的任何调用中,我检查服务器是否返回 401(未授权)。如果发生这种情况, bool 值将设置为 false (boolean isLogged)。 AppDelegate 观察这个 bool 值。如果值更改为 false,我想将用户返回到登录屏幕(记住,Storyboard 上的初始 View )。

这是一些代码:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {

if ([keyPath isEqualToString:@"isLogged"]) {
BOOL logged = [[change objectForKey:NSKeyValueChangeNewKey] boolValue];
if (logged) {
NSLog(@"Logged in succesfully!");
} else {
NSLog(@"Logout performed");

[self.window makeKeyAndVisible];
[self.window layoutSubviews];

}

}

这工作正常,但是当我尝试再次登录时 LoginOK 没有执行 segue。

我试过很多其他的选择,像这样:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];

UIViewController *loginController = [storyboard instantiateViewControllerWithIdentifier:@"Login"];

[source presentModalViewController:loginController animated:YES];

但问题是我不知道哪个 View Controller 执行了注销。源必须是应用程序中显示的当前 View Controller ,不是吗?

最佳答案

最后,我解决了将 isLogged 的观察者从 App Delegate 更改为我的自定义 TabViewController 的问题。在 viewDidLoad 中,我订阅了这个变量。

在方法 observeValueForKeyPath 中,我执行以下操作:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];

LoginViewController *loginController = [storyboard instantiateViewControllerWithIdentifier:@"Login"];


[self presentModalViewController:loginController animated:YES];

关于objective-c - 使用 Storyboard 从任何 View 执行到初始 View 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11281631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com