zoukankan      html  css  js  c++  java
  • NSError错误类的使用

    学会2个方面的内容,基本就可以上手NSError:

    1、NSError对象的创建和解读

    2、NSError对象的传递方式,通过委托方法回调方式、通过以NSerror对象指针的指针作为参数的方式

    一、NSError的创建和解读

    - (void)test {
        // 代码一
        NSString *desc1 = NSLocalizedString(@"FileNotFound", @"");
        NSDictionary *info1 = @{NSLocalizedDescriptionKey : desc1};
        NSError *error1 = [NSError errorWithDomain:NSCocoaErrorDomain code:NSFileNoSuchFileError userInfo:info1];
        NSLog(@"error1:%@", error1);
        
        // 代码二
        NSString *desc2 = @"FileNotFound";
        NSDictionary *info2 = @{@"NSiOSKey" : desc2};
        NSError *error2 = [NSError errorWithDomain:@"iOSDomain" code:8888 userInfo:info2];
        NSLog(@"error2:%@", error2);
        
        // 代码三
        NSString *desc3 = @"FileNotFound";
        NSDictionary *info3 = @{NSLocalizedDescriptionKey : desc3};
        NSError *error3 = [NSError errorWithDomain:@"iOSDomain" code:8888 userInfo:info3];
        NSLog(@"error3:%@", error3);
        
        // 代码四
        NSString *desc4 = NSLocalizedString(@"FileNotFound", @"");
        /*
         NSLocalizedDescriptionKey、NSLocalizedFailureReasonErrorKey 等?
         */
        NSDictionary *info4 = @{NSLocalizedDescriptionKey : desc4};
        NSError *error4 = [NSError errorWithDomain:@"3CWDomain" code:111 userInfo:info4];
        NSLog(@"error4:%@", error4);
        
        // 代码五
        NSString *description = [error4 localizedDescription];
        NSString *domian = [error4 domain];
        NSInteger code = [error4 code];
        NSDictionary *infoDic = [error4 userInfo];
        NSString *descMesssage = [infoDic objectForKey:NSLocalizedDescriptionKey];
        NSLog(@"description:%@  domian:%@  code:%ld  descMesssage:%@", description, domian, code, descMesssage);
    
    }

    打印的结果:

    2021-08-05 13:31:38.549182+0800 OCTestLine[10570:258023] error1:Error Domain=NSCocoaErrorDomain Code=4 "FileNotFound" UserInfo={NSLocalizedDescription=FileNotFound}
    2021-08-05 13:31:38.549253+0800 OCTestLine[10570:258023] error2:Error Domain=iOSDomain Code=8888 "(null)" UserInfo={NSiOSKey=FileNotFound}
    2021-08-05 13:31:38.549288+0800 OCTestLine[10570:258023] error3:Error Domain=iOSDomain Code=8888 "FileNotFound" UserInfo={NSLocalizedDescription=FileNotFound}
    2021-08-05 13:31:38.549333+0800 OCTestLine[10570:258023] error4:Error Domain=3CWDomain Code=111 "FileNotFound" UserInfo={NSLocalizedDescription=FileNotFound}
    2021-08-05 13:31:38.549358+0800 OCTestLine[10570:258023] description:FileNotFound  domian:3CWDomain  code:111  descMesssage:FileNotFound
    Program ended with exit code: 0

    参数说明:

    Code码可以自定义;

    Domain指的是错误域,有4中主要的错误域,当然也可以自定义错误域;

    UserInfo是NSDictionary实例,指的是用户信息字典,含有的信息类型包括错误的本地化信息和对支持对象的引用。

     二、NSError的传递方式

    一种方式就是通过委托方法,因为“委托者”会弱引用“委托对象”,即(weak)delegate。委托对象所指向的类会声明和定义“委托方法”,在需要的情况下,委托者会调用委托对象中的委托方法,故正在此时,将错误对象作为委托方法的参数,便传递给了“委托对象”。

    第二种方式,是一种常见的OC编程惯例,将方法的最后一个参数设置为指向错误对象指针的指针(也称为双重间接模式)。通过这种方式可以使被调用的方法修改错误对象的指针,而且当出现错误时,返回与方法调用操作对应的错误对象。

    - (void)test {
    
        NSError *error;
        BOOL success = [self changeValue:&error];
        if (!success) {
            NSLog(@"error:%@", error);
        }
    }
    
    - (BOOL)changeValue:(NSError **)error {
        
        NSString *desc = NSLocalizedString(@"FileNotFound", @"");
        NSDictionary *info = @{NSLocalizedDescriptionKey : desc};
        *error = [NSError errorWithDomain:NSCocoaErrorDomain code:NSFileNoSuchFileError userInfo:info];
        return NO;
    }
  • 相关阅读:
    冲销收货
    收货MIGO
    删除PO
    创建po
    File的功能--> 获取功能-->所有的根目录 | 创建文件功能,但是如果文件已经存在-->不再创建(新手)
    在d盘创建文件夹,里面有aaa.txt/bbb.txt/ccc.txt,然后遍历出aaa文件夹下的文件(新手)
    创建一个唱歌类集合,创建一个电影类集合,让其归类打印(新手)
    抛出异常(新手)
    Map-->HashMap练习(新手)
    JAVA-迭代器增强型for循环。(新手)
  • 原文地址:https://www.cnblogs.com/cchHers/p/15103306.html
Copyright © 2011-2022 走看看