我试图在向对象添加对象之前检查NSMutableArray是否具有特定对象,如果存在则不添加。
我查看了很多帖子,解释了如何做到这一点,设法像这样实现它,但它总是让我对象“不存在”,虽然我已经添加了它!
//get row details into FieldLables Object
AllItemsFieldNames *FieldLabels = feedItems[row];
// object to hold single row detailes
AllItemsFieldNames *SelectedRowDetails = [[AllItemsFieldNames alloc] init];
SelectedRowDetails.item_name = FieldLabels.item_name;
//SelectedRowDetails.item_img = FieldLabels.item_img;
SelectedRowDetails.item_price = FieldLabels.item_price;
//NSLog(@"item has been added %@", SelectedRowDetails.item_name);
//NSLog(@"shopcartLength %lu", (unsigned long)SelectedFieldsNames.count);
if([SelectedFieldsNames containsObject:SelectedRowDetails])
{
NSLog(@"Already Exists!");
}
else
{
NSLog(@"Doesn't Exist!");
[SelectedFieldsNames addObject:SelectedRowDetails];
}
我可以将NSMutableArray中的所有对象显示到一个表中,我需要在上面的代码中做的就是停止添加重复的对象。
答案 0 :(得分:3)
NSArray文档中列出的第一个方法"查询数组"是containsObject:
。如果它无效,则表明您的isEqual:
实施不正确。请务必遵循文档中的说明:
如果两个对象相等,则它们必须具有相同的哈希值。这个 如果你定义isEqual:在a中,最后一点尤为重要 子类并打算将该子类的实例放入 采集。确保您还在子类中定义哈希。
您也可以考虑使用NSSet
,因为您无法添加重复项。当然,这还需要isEqual:
的工作版本。
答案 1 :(得分:-1)
集由唯一元素组成,因此这是删除数组中所有重复项的便捷方法。 这里有一些样本,
NSMutableArray*array=[[NSMutableArray alloc]initWithObjects:@"1",@"2",@"3",@"4", nil];
[array addObject:@"4"];
NSMutableSet*chk=[[NSMutableSet alloc ]initWithArray:array]; //finally initialize NSMutableArray to NSMutableSet
array= [[NSMutableArray alloc] initWithArray:[[chk allObjects] sortedArrayUsingSelector:@selector(compare:)]]; //after assign NSMutableSet to your NSMutableArray and sort your array,because sets are unordered.
NSLog(@"%@",array);//1,2,3,4