解决 arr containsObject 方法每次都返回NO的问题
当指针赋值 无论你改变或者不改变属性值 每次都是返回YES 因为地址是没有改变的 看下面代码
ListArchive *obj1 = [[ListArchive alloc]init];
ListArchive *obj2 = [[ListArchive alloc]init];
ListArchive *obj3 = [[ListArchive alloc]init];
ListArchive *obj4 = [[ListArchive alloc]init];
NSMutableArray *objectArray = @[obj1,obj2,obj3,obj4].mutableCopy;
for (int i=0; i<objectArray.count; i++) {
ListArchive *obj = objectArray[i];
obj.name = @"123";
if ([objectArray containsObject:obj]) {
NSLog(@"包含");
}else{
NSLog(@"不包含");
}
}
但是当你重新创建一个对象 哪怕对象的属性和值全部一样 也是返回NO 因为是个新对象 指针地址是不一样的
看如下代码 ![arr containsObject:archive]每次都是返回YES 即[arr containsObject:archive]的结果每次都是返回NO
for (int j=0; j<[[lab sortedFolderItems]count]; j++) {
MLFile *file = [lab sortedFolderItems][j];
ListArchive *archive = [[ListArchive alloc]init];
archive.name = lab.name;
archive.unique_thumbnailName = file.thumbnailName;
if (![arr containsObject:archive]) {
NSLog(@"不包含%@",archive.unique_thumbnailName);
[arr addObject:archive];
}
// [NSString stringWithFormat:@"archiver%d",i+1]];
}
对于这样的问题 我们应该在类中重写isEquil方法就好 如下
#import "ListArchive.h"
@implementation ListArchive
/**归档*/
- (void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:_name forKey:@"name"];
[aCoder encodeObject:_unique_thumbnailName forKey:@"unique_thumbnailName"];
}
/**解档*/
- (instancetype)initWithCoder:(NSCoder *)aDecoder{
if (self == [super init]) {
_name = [aDecoder decodeObjectForKey:@"name"];
_unique_thumbnailName = [aDecoder decodeObjectForKey:@"unique_thumbnailName"];
}
return self;
}
- (BOOL)isEqual:(ListArchive *)other{
return [self.name isEqualToString:other.name] && [self.unique_thumbnailName isEqualToString:other.unique_thumbnailName];
}
@end
根据自己的条件 进行比较 这样就能解决arr containsObject 问题了
本文地址:https://blog.csdn.net/lixianyue1991/article/details/108119074
推荐阅读
-
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
-
表单提交错误后返回内容消失问题的解决方法(PHP网站)
-
Hibernate通过SQL查询常量时只返回第一个字符问题的解决方法
-
解决ASP.NET中Type.GetType方法总返回空的问题
-
Python os模块中的isfile()和isdir()函数均返回false问题解决方法
-
MySql sum函数返回null问题的解决方法
-
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
-
每次开机都需要 重新格式化 才有 NameNode进程 的解决方法
-
Mac装Win8.1每次关机后都重启怎么解决?Mac装Win8.1关不了机的解决方法
-
Mac电脑使用:SourceTree每次操作都提示输入密码的解决方法