Foundation框架 - NSException类

NSException类

WBStudentManager.h

#import <Foundation/Foundation.h>
NSString* const NameInvalidException ;
@interface WBStudentManager : NSObject

- (void)registStudent:(NSString*)name;
@end

WBStudentManager.m

#import "WBStudentManager.h"

@implementation WBStudentManager
//注册学生信息
- (void)registStudent:(NSString *)name
{
    if (name==nil) {
        NSException* ex=[NSException exceptionWithName:
        NSInvalidArgumentException reason:@"name不能为nil" userInfo:nil];
        @throw ex;  //抛出异常对象
    }
    if ([name isEqual:@"学生"]) {
        /**
         *  arg1: name自定义异常名称
         *  arg2: 异常的原因,使用的是类似NSLog()的方式,带格式替换
         */
        [NSException raise:@"NameInvalidException" format:@"学生姓名%@不合法",name];
        NSLog(@"raise方法调用后立即会结束当前方法,该行的log语句无法执行!");
    }
}
@end

main.m

//
//  main.m
//  9.NSException
//
//  Created by wangzhaolu on 14-2-29.
//  Copyright (c) 2014年 Turing All rights reserved.
//

#import "WBStudentManager.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {

        //NSInvalidArgumentException
        @try{
            NSString* str =[[NSString alloc]initWithString:nil];
            NSLog(@"nil string 输出结果%@",str);
        }
        @catch(NSException* ex)
        {
            //字符串比较可以使用==进行比较,比较的是内容不是地址,相当于isEqual|isEqualToString
            if(ex.name == NSInvalidArgumentException)
            {
                NSLog(@"输入的参数不正确,atString不能为nil");
                NSLog(@"系统输出原因:%@",ex.reason);
                NSLog(@"userInfo:%@",ex.userInfo);

            }
            NSLog(@"出现了异常");
        }
        //finally不是必须的!!除非要清理内存等操作
        @finally{
                NSLog(@"最终运行了finally部分");
        }

        @try {
            WBStudentManager* mgr=[WBStudentManager new];
            [mgr registStudent:nil];
            //[mgr registStudent:@"王小明"];
        }
        @catch (NSException *exception) {
            if ([exception.name isEqual:NameInvalidException]) {
                //姓名无效异常
                NSLog(@"学生姓名输入不符合规范!");
            }else if([exception.name isEqual: NSInvalidArgumentException]){
                //姓名为nil
                NSLog(@"学生姓名为空,无法执行!");
                //将当前错误在抛出
                //方式一:
                //@throw;

                //方式二:
                [exception raise];
            }
        }
    }
    return 0;
}
时间: 2024-08-14 18:05:05

Foundation框架 - NSException类的相关文章

黑马程序员--Foundation框架之--类其他常用的类:NSNumber,NSDate

------IOS培训期待与您交流! ------- Foundation的其他常用的类:NSNumber,NSDate 一.NSNumber 这个类主要是用来封装基本类型的,OC 中的集合是不允许存入基本类型的,所以NSNumber类就诞生了,需要将基本类型封装一下,然后存进去. 从这一点上我们就可以看出NSNumber是很重要的,后面一定会经常用到. 1.封包和解包 // 创建NSNumber // 封包 NSNumber *intNumber = [NSNumber numberWithI

Foundation框架 - NSNumber类

NSNumber类 NSFormatter #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { NSLog(@"1******************* NSFormatter ***********************"); NSNumber* nb1=[NSNumber numberWithInt:25]; NSNumber* n

黑马程序员——Foundation框架常用类(NSDate)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------ 简介 NSDate:用于保存时间值的一个OC类,同时提供了一些方法来处理一些与时间相关的事.NSDate对象用来表示一个具体的时间点.NSDate是一个类簇,我们所使用的NSDate对象,都是NSDate的私有子类的实体.NSDate存储的是GMT时间,使用的时候会根据 当前应用 指定的 时区 进行时间上的增减,以供计算或显示. NSDate 1.时间对象的基本使用 //第一种创建方式(里面存储

Foundation框架 - NSDate类

NSDate类 // // main.m // 8.NSDate // // Created by wangzhaolu on 14-2-25. // Copyright (c) 2014年 Turing. All rights reserved. // #import <Foundation/Foundation.h> static void transTimeZone(NSString* currDateStr); int main(int argc, const char * argv[

Foundation框架 - NSDictionary类、NSMutableDictionary类

NSArray.NSSet.NSDictionary /* 集合 1.NSArray\NSMutableArray * 有序 * 高速创建(不可变):@[obj1, obj2, obj3] * 高速訪问元素:数组名[i] 2.NSSet\NSMutableSet * 无序 3.NSDictionary\NSMutableDictionary * 无序 * 高速创建(不可变):@{key1 : value1, key2 : value2} * 高速訪问元素:字典名[key] */ 字典创建 #im

iOS Foundation 框架基类

太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的漂亮人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 基类 Title Topic Date NSObject Class Reference Data Types & Collections

黑马程序员——Foundation框架常用类(NSNumber/NSValue)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------ 简介 引入:NSArray.NSSet.NSDictionary这些OC集合都只能存放OC对象,不能存放基本数据类型(int.char.double...).如果我们想将基本数据类型存到这些OC集合中,那么我们将基本数据类型(int.char.double...)包装成OC对象,那么就可以存到OC集合中.NSNumber可以将基本数据类型包装为OC对象. NSValue:用来存储一个C或者OC的

Objective-C:Foundation框架-常用类-NSNumber

NSArray.NSDictionary是不可以存储C语言中的基本数据类型的.NSNumber可以将基本数据类型包装成对象,这样可以间接将基本数据类型存进NSArray.NSDictionary等集合类中.用法如下: #import <Foundation/Foundation.h> void number() { // 将int类型的10 包装成 一个NSNumber对象 NSNumber *number = [NSNumber numberWithInt:10]; NSLog(@"

Objective-C:Foundation框架-常用类-NSDictionary

与NSString.NSArray一样,NSDictionary是不可变的,其对应可变类型为NSMutableDictionary.其用法如下: #import <Foundation/Foundation.h> @interface Student : NSObject @property (nonatomic, retain) NSString *name; + (id)studentWithName:(NSString *)name; @end #import "Student