执行 segue 抛出错误

Posted

技术标签:

【中文标题】执行 segue 抛出错误【英文标题】:perform segue throws error 【发布时间】:2015-06-25 05:16:56 【问题描述】:

我在目标 c 中实现了一些 Json 帖子,在收到信息后,我尝试推送 segue 方法,但它抛出了这个异常

2015-06-25 00:08:33.807 BarApp[1446:109590] -[NSNull 长度]:无法识别的选择器发送到实例 0x37439830

2015-06-25 00:08:33.809 BarApp[1446:109590] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[NSNull 长度]:无法识别的选择器发送到实例 0x37439830”

这是我的代码

-(void) MakePost: (int)typePost 
    NSString *mainUrl = @"http://url.com/barap/usuario.php";
    NSString *post;
    
    if(typePost == 0) 
        post = [NSString stringWithFormat:@"?type=0&email=%@&password=%@",self.emailTextField.text, self.passwordTextField.text];
    else if(typePost == 1)
        post = [NSString stringWithFormat:@"?type=1&fb_id=%@&nombre=%@&apellido_m=%@&email=%@&profile_picture=%@",fb_id, nombre, apellidoM, email, profilePictureUrl];
    
    
    NSString *webPostUrl = [NSString stringWithFormat:@"%@%@", mainUrl, post];
    webPostUrl =[webPostUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSURL *postUrl = [NSURL URLWithString:webPostUrl];
    NSData *userInfo = [[NSData alloc] initWithContentsOfURL:postUrl];

    if(userInfo)
        NSMutableDictionary *userResults = [NSJSONSerialization JSONObjectWithData:userInfo options:NSJSONReadingMutableContainers error:nil];
        if (![userResults[@"id"] isEqualToString:@""]) 
            [defaults setObject:userResults[@"id"] forKey:@"userId"];
            NSLog(@"%@", [[NSUserDefaults standardUserDefaults] valueForKey:@"userId"]);

这是我的代码崩溃的地方!

[self performSegueWithIdentifier:@"loginSuccess" sender:self];
            
            
            if(typePost == 1)
                [FBSDKAccessToken setCurrentAccessToken:nil];
                [FBSDKProfile setCurrentProfile:nil];
            
        
    else 
        UIAlertView* cError = [[UIAlertView alloc]initWithTitle:@"Erro!" message:@"Tuvimos un Error intente mas tarde" delegate:self cancelButtonTitle:@"Cancelar" otherButtonTitles:@"OK", nil];
        [cError show];
    


- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
    if([[segue identifier] isEqualToString:@"loginSuccess"]) 
        [segue destinationViewController];
    

【问题讨论】:

【参考方案1】:

该消息表明在NSNull 对象上调用了length 方法。因为length 方法很可能会在NSString 上调用

查看此链接

-[NSNull length]: unrecognized selector sent to JSON objects

【讨论】:

【参考方案2】:

您应该检查 [NSNULL null]。您在 Json 请求中收到一个或多个 NSNUll 值。

检查一下这可能是你需要的-[NSNull isEqualToString:]

这些行将帮助您更多- NSMutableDictionary *dicAfterRemovingNull = [NSMutableDictionary dictionaryWithDictionary: yourDictionary]; // 如果字典和 for 数组用 MutableArray 改变这一行

for(NSString *key in [dicAfterRemovingNull allKeys])

    const id object = [dicAfterRemovingNull objectForKey:key];
    if(object == [NSNull null])
    
        [dicAfterRemovingNull setValue:@"whatever you want" forKey:key];
    

【讨论】:

以上是关于执行 segue 抛出错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 webview 后如何使用 segue?

Swift:执行 Segue 不触发 - 无错误(可达性)

执行 segue 时的 EXC_BAD_ACCESS(code 1, address=0x1)

iOS8 UITableView 和 Cell - 自动布局高度 - 触摸和执行 segue 时的移位/垂直偏移错误

如何从 SKScene 中执行 segue?

使用FBSDK登录,无法执行segue