oc 异常报错

来源:互联网 发布:网络空间研究院 编辑:程序博客网 时间:2024/06/06 08:47

自:《Effective Objective-C2.0编写高质量iOS与OS X代码的52个有效方法》

(一)
报错:Expected a type
现象:两个类的头文件相互引用报错,造成循环引用
解决:使用“向前申明”解决

////  EOCPerson.h//  iOS////  Created by wu on 15/6/6.//#import <Foundation/Foundation.h>//打开这个注释,Expected a type 报错,原因是循环引用造成的两个类当中有一个无法被正确编译//#import "EOCEmployer.h"//向前申明 打开这个注释,Expected a type 将不报错@class EOCEmployer;@interface EOCPerson : NSObject@property (nonatomic, copy) NSString *firstName;@property (nonatomic, copy) NSString *lastName;@property (nonatomic, strong) EOCEmployer *employer;@end
////  EOCPerson.m//  iOS////  Created by wu on 15/6/6.//#import "EOCPerson.h"#import "EOCEmployer.h"@implementation EOCPerson-(void) printEmployer{    NSLog(@"employer%@", self.employer);}@end
////  EOCEmployer.h//  iOS////  Created by wu on 15/6/6.//#import <Foundation/Foundation.h>#import "EOCPerson.h"@interface EOCEmployer : NSObject- (void)addEmployer:(EOCPerson*)person;- (void)removeEmployer:(EOCPerson*)person;@end
////  EOCEmployer.m//  iOS////  Created by wu on 15/6/6.//#import "EOCEmployer.h"@implementation EOCEmployer- (void)addEmployer:(EOCPerson*)person{}- (void)removeEmployer:(EOCPerson*)person;{}@end

(二)
异常: * Terminating app due to uncaught exception ‘NSInvalidArgumentException’, reason: ‘* -[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[1]’
原因:字面数组中有为nil的元素
解决:检查各个元素,将为nil的元素修改

    //普通创建数组的方式    NSArray *animals = [NSArray arrayWithObjects:@"cat", @"dog", @"mouse", @"badger", nil];    //使用    NSString *dog = [animals objectAtIndex:1];    //创建字面量数组    NSArray *animals1 = @[@"cat", @"dog", @"mouse", @"badger"];    //使用    NSString *cat = animals1[0];    //如:    id object1 = @1;    id object2 = nil;    id object3 = @3;    //此数组中只有object1,因为arrayWithObjects会依次处理各个参数,直到发现nil为止    NSArray *arrayA = [NSArray arrayWithObjects:object1, object2, object3, nil];    //而object2位nil,会引发异常,向数组中插入nil通常说明程序有错,通过异常可以更快的发现这个错误    //使用字面量数组比上面的方式更安全    NSArray *arrayB = @[object1, object2, object3];    NSLog(@"%@", arrayA[1]);    NSLog(@"%@", arrayB[1]);
0 0
原创粉丝点击