8

我正在尝试开发一个允许用户使用 AFNetworking 登录的应用程序。我已经正确设置了数据库,除了用户第一次登录外,一切似乎都运行良好。

我所拥有的非常简单:

[[API sharedInstance] commandWithParams:params
                               onCompletion:^(NSDictionary *json) {
                                   //result returned

                                   NSDictionary* res = [[json objectForKey:@"result"] objectAtIndex:0];

                                   if ([json objectForKey:@"error"]==nil && [[res objectForKey:@"UserID"] intValue]>0) {
                                       [[API sharedInstance] setUser: res];
                                       [self performSegueWithIdentifier:@"Login" sender:self];
                                   } else {
                                       //error
                                       [UIAlertView title:@"Error" withMessage:[json objectForKey:@"error"]];
                                   }

                               }];

基本上,上面的代码返回用户登录详细信息的结果,只有当登录详细信息匹配时才成功。正如您在上面看到的,我在 sharedInstance 中明确设置了用户,在整个应用程序中使用。设置用户后,我尝试执行 segue,因为这就是登录按钮应该做的。

segue 确实发生了,程序可以运行,但是有两个问题我无法解决,我一直在花费数小时试图修复它。首先我在 Xcode 的输出窗口中得到消息:

警告:在演示过程中尝试在 LoginVC 上演示 UITabBarController!

其次,为了测试用户设置是否正确,在配置文件屏幕(第一个屏幕连接到)上有一个标签,其文本设置为:

NSString stringWithFormat:@"Welcome %@",[[[API sharedInstance] user] objectForKey:@"username"]];

用户名是否实际出现或说(null)是一个命中或错过,如图所示:

在此处输入图像描述

您还可以看到我在那里制作的一个按钮,用于将用户的值打印到输出窗口。即使消息是“欢迎(null)”并且我按下按钮,所有值都正确存在,所以我不确定为什么字符串有时会显示为 null。

这是关于我遇到的问题的故事板设置:

在此处输入图像描述

如果有人可以帮助我解决这个问题,我将不胜感激。

4

2 回答 2

9

正如您正确诊断的那样,问题肯定是对 segues 的一些奇怪和/或重复调用。查看您的项目,问题在于您的“登录”按钮既有IBAction方法又有从该登录屏幕到下一个控制器(标签栏控制器)的segue:

IBAction 和 segue

这是一个问题,因为当您点击按钮时会触发 segue,但会由您的- (IBAction)login:(id)sender代码再次触发。

因为你有一个IBAction,segue 不应该从按钮到下一个控制器,而是来自控制器本身。Login因此,将现有的segue 从按钮删除到下一个屏幕,然后从控制器本身重新创建它:

从控制器创建转场到下一个场景

为新的 segue 提供“登录”标识符,现在您的“登录”按钮将不会自动执行 segue,而是让其IBAction工作并performSegueWithIdentifier酌情手动执行。

于 2012-11-07T14:07:02.853 回答
0

发送/触发事件:Did End On Exit

将它连接到您调用的方法performSegueWithIdentifier

这样就不会触发两次。

于 2013-01-11T14:16:43.327 回答