[__NSArrayI addObject:]: unrecognized selector sent to instance

本文探讨了在Objective-C中使用NSMutableArray时遇到的错误:通过addObject运行时报错unrecognizedselector。介绍了三种解决方法,包括修改属性修饰词、自定义setter方法及改变copy为retain。

当我创建了一个NSMutableArray 对象的时候

@property (nonatomic,copy)NSMutableArray *children;

然后通过addObject运行就会报错,[__NSArrayI addObject:]: unrecognized selector sent to instance

 

解决方式:

1. 在 ARC 环境下, 将 dataSource 修饰词 改为 strong

2、通过理解,我们知道addObject后的array其实是变了,可能内存变大了,你可以理解成这个对象已经不是原来的了,就相当于没有定义一个具体实例对象一样。但通过@synthesize 默认的setter不能保证copy就一定等于mutableCopy;所以我们需要自定义自己的setter方法。 例如我的定义,在.m中增加我们自己定义的setter方法,让它进行mutableCopy即可。

-(void)setChildren:(NSMutableArray*) array{

if(children != nil) {

children = nil;

}

children = [array mutableCopy];

}

3、把copy变成retain,因为不是copy创建新内存和新赋值的话,原有实例对象就不会“全新”导致unrecognized selector sent to instance。

`[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[0]` 错误表示在初始化字典时,尝试将一个 `nil` 对象插入到字典中。在 Objective - C 里,字典不允许存储 `nil` 值。以下是一些解决该错误的方法: #### 检查数据源 在将对象插入字典之前,要确保对象不为 `nil`。可使用条件语句进行检查,示例代码如下: ```objc id object = getObject(); // 假设这是获取对象的方法 id key = @"someKey"; NSDictionary *dictionary; if (object != nil) { dictionary = @{key: object}; } else { // 处理对象为 nil 的情况 NSLog(@"Object is nil, cannot insert into dictionary."); } ``` #### 使用默认值 若对象可能为 `nil`,可以在插入字典时使用默认值来替代 `nil`。示例代码如下: ```objc id object = getObject(); // 假设这是获取对象的方法 id key = @"someKey"; id nonNilObject = object ?: [NSNull null]; // 如果 object 为 nil,使用 [NSNull null] 替代 NSDictionary *dictionary = @{key: nonNilObject}; ``` #### 过滤 `nil` 值 要是有多个对象和键要插入字典,可以在插入之前过滤掉 `nil` 值。示例代码如下: ```objc NSArray *objects = @[object1, object2, object3]; NSArray *keys = @[@"key1", @"key2", @"key3"]; NSMutableArray *validObjects = [NSMutableArray array]; NSMutableArray *validKeys = [NSMutableArray array]; for (NSUInteger i = 0; i < objects.count; i++) { id object = objects[i]; if (object != nil) { [validObjects addObject:object]; [validKeys addObject:keys[i]]; } } NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:validObjects forKeys:validKeys]; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值