美文网首页
IOS开发过程中遇见的报错及解决方法汇总

IOS开发过程中遇见的报错及解决方法汇总

作者: Felix灬泡泡 | 来源:发表于2016-11-20 17:19 被阅读0次
    1、报错:Application tried to present a nil modal view controller on target XXXX.
    • 描述:试图presentViewController时报错。
    • 原因:将要present出的ViewController为nil。
    • 解决办法:初始化ViewController,�如果该ViewController是通过SB创建,请保证Identifier等相关信息填写正确!
    2、报错:unable to dequeue a cell with identifier identifierCell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard.
    • 描述:在使用UITableViewController时,运行报错。
    • 原因:未给tableView注册identifier。
    • 解决办法:在viewDidLoad方法中添加:
    [self.tableView registerNib:[UINib nibWithNibName:@"identifierTableViewCell" bundle:nil] forCellReuseIdentifier:@"identifierCell"];//identifierTableViewCell为Cell所在的XIB文件名
    

    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"identifierCell"];
    
    3、报错:Warning: Attempt to present <UIAlertController: XXX> on <XXXTableViewController: XXX> which is already presenting (null).
    • 描述:在XXXTableViewController中,已经present出了RMPickerViewController,打算点击确定按钮后再present出UIAlertController时报错。
    • 原因:该控制器已经present出了RMPickerViewController,不能present新的。
    • 解决办法:在新present的代码之前加上:
    [已经present出的ViewController dismissViewControllerAnimated:YES completion:nil];
    

    当然,最好的写法是通过如下方法找到present出来的控制器,再去dismiss。

    [UIApplication sharedApplication].keyWindow.rootViewController.presentedViewController:
    
    4、报错:Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFDictionary setObject:forKey:]: mutating method sent to immutable object'.
    • 描述:取出NSUserDefaults为NSMutableDictionary后,修改其的值然后再以同样的Key存入NSUserDefaults时报错。
    • 原因:NSUserDefaults只能对如下几类数据进行存取(NSString、NSNumber、NSDate、NSArray、NSDictionary)(其它可转换为NSDate进行存取)!
    • 解决办法:取出的NSUserDefaults存为NSDictionary,然后再申明一个NSMutableDictionary使用dictionaryWithDictionary方法。修改NSMutableDictionary的值,再以同样的Key值存入NSUserDefaults成功。
      同理注意:
      以下写法会报错:
    NSMutableArray *mArr = [[NSUserDefaults standardUserDefaults] objectForKey:@"arrKey"];
    [mArr addObject:@"object"];
    
     NSMutableDictionary *mDic = [[NSUserDefaults standardUserDefaults] objectForKey:@"dicKey"];
    [mDic setObject:@"value" forKey:@"key"];
    

    不会报错姿势:

    NSArray *arr = [[NSUserDefaults standardUserDefaults] objectForKey:@"arrKey"];
    NSMutableArray *mArr = [NSMutableArray arrayWithArray:arr];
    [mArr addObject:@"object"];  
    
     NSDictionary *dic = [[NSUserDefaults standardUserDefaults] objectForKey:@"dicKey"];
    NSMutableDictionary *mDic = [NSMutableDictionary dictionaryWithDictionary:dic];
    [mDic setObject:@"value" forKey:@"key"];
    

    <br />

    本文为本人开发过程中遇见的报错以及解决办法,本人为小白,所以有些原因可能写得不正确或解决办法不是最优。
    如有错误,欢迎指正!
    继续更新中......

    相关文章

      网友评论

          本文标题:IOS开发过程中遇见的报错及解决方法汇总

          本文链接:https://www.haomeiwen.com/subject/dbrypttx.html