您的位置:首页 > 移动开发 > IOS开发

iOS 【错误:unrecognized selector sent to instance 0x7aa552b0】

2015-11-13 16:45 489 查看
翻译:给实体对象发送了不认识的消息

大概有如下两个出错原因:
1.对象过早的释放掉了,你引用的对象不存在。不能想空对象发送特定的方法(不是全部,因为release等特殊方法,例外)。
2.该对象没有这个方法,检查一下方法参数跟调用该方法时参数是否匹配(切记粗心大意)。

我出现错误是在对一个属性懒加载的过程中:
错误代码:
- (NSArray *)flagsArr
{
if (_flagsArr == nil) {
NSArray *arr  = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"flags" ofType:@"plist"]];
NSMutableArray *arrM = [NSMutableArray array];
for (NSDictionary *dict in arr) {
//Flags *flag = [Flags flagsWithDict:dict]; 当时没有加这句话,并且下面一句给可变数组赋值传的是dict,而不是解析好的模型实例化对象
[arrM addObject:dict];
}
_flagsArr = arrM;
}
return _flagsArr;
}

正确代码:
- (NSArray *)flagsArr
{
if (_flagsArr == nil) {
NSArray *arr  = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"flags" ofType:@"plist"]];
NSMutableArray *arrM = [NSMutableArray array];
for (NSDictionary *dict in arr) {
Flags *flag = [Flags flagsWithDict:dict];//★关键语句
[arrM addObject:flag];//★关键语句
}
_flagsArr = arrM;
}
return _flagsArr;
}
我们在用模型中的数据的时候,会用到其中属性参数,所以说上面示例中应该是将解析完毕并传入数据的模型实例对象存储到 _flagsArr 中,这样这个属性才能被代理方法和数据源方法调用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息