Iphone Xcode Objective-C Segue“;“正在进行演示”;
我正在尝试开发一个应用程序,允许用户通过AFNetworking登录。我已经正确设置了数据库,除了用户第一次登录外,一切都正常 我所拥有的是非常简单的:Iphone Xcode Objective-C Segue“;“正在进行演示”;,iphone,ios,xcode,segue,afnetworking,Iphone,Ios,Xcode,Segue,Afnetworking,我正在尝试开发一个应用程序,允许用户通过AFNetworking登录。我已经正确设置了数据库,除了用户第一次登录外,一切都正常 我所拥有的是非常简单的: [[API sharedInstance] commandWithParams:params onCompletion:^(NSDictionary *json) { //result returned
[[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),这都是一个命中或未命中的结果,如图所示:
您还可以看到我在那里制作的一个按钮,用于将用户的值打印到输出窗口。即使消息是“Welcome(null)”,我按下按钮,所有的值都正确,所以我不确定为什么字符串有时表示null
以下是关于我遇到的问题的故事板设置:
如果有人能在这方面帮助我,我将不胜感激。正如您正确诊断的那样,问题肯定是某些奇怪的和/或重复的序列调用。查看您的项目,问题在于您的“登录”按钮既有一个
iAction
方法,也有一个从该登录屏幕到下一个控制器(选项卡栏控制器)的序列:
这是一个问题,因为当您按下按钮时会触发segue,但会由您的-(iAction)登录名:(id)发送者再次触发
因为您有一个iAction
,所以该序列不应该从按钮到下一个控制器,而是从控制器本身。因此,删除现有的登录
从按钮切换到下一个屏幕,并从控制器本身重新创建:
为新的segue赋予“Login”标识符,现在您的“Login”按钮将不会自动执行segue本身,而是让iAction
执行其工作,并根据需要手动performsguewithidentifier
。在以下时间发送/触发事件:Did End on Exit
将其连接到调用performsguewithidentifier
的方法
这样它就不会触发两次。您是否在prepareforsgue
中配置目标控制器?也许您可以向我们展示目标控制器的prepareForSegue
以及viewDidLoad
的相关部分。嗨,Rob。我的“prepareForSegue”是:-(void)prepareForSegue:(UIStoryboardSegue*)segue发送方:(id)发送方{if([segue.identifier IsequalString:@“SignUp”]){SignUpVC*SignUpVC=segue.destinationViewController;SignUpVC.delegate=self;}
和配置文件控制器的“viewdiload”(在选项卡栏控制器中查看的第一个控制器是:-(void)viewDidLoad{[super viewDidLoad];//加载视图后执行任何其他设置。self.welcomeMsg.text=[NSString stringWithFormat:@“Welcome%@”,[[API sharedInstance]用户]objectForKey:@“username”];}
谢谢。这消除了这种现象的常见根源,即人们在调用viewDidLoad
之前试图访问目标视图的控件。我想下一步是确定was是否正在生成nil
值,是否为[API sharedInstance],用户的方法[API sharedInstance]
,或者用户名的NSDictionary
条目是nil
这一事实。我倾向于为这三种情况中的每一种设置调试消息,以确定nil
值的来源,并且您可以从中缩小问题的范围。另外,您的的用户
对象如何e> API
object defined?当然不是weak
,对吧?我检查了用户并将其设置为strong。我将其设置为viewDidLoad:CFShow((u-bridge-CFTypeRef)([API-sharedInstance]);CFShow(u-bridge-CFTypeRef)([API-sharedInstance]user]);NSLog(@“%@,[[API-sharedInstance]user]objectForKey:@“username”);self.welcomeMsg.text=[NSString stringWithFormat:@“Welcome%@”,[[[API sharedInstance]用户]objectForKey:@“username”];
回答和解释非常好!对我来说非常有用!