3

我有一个可以添加对象的 NSMutableArray。添加的SUPDataValue对象是包含一堆SUP数据的对象。

在另一个视图中,我采用此对象数组并将其划分为一个NSMutableArray包含NSMutableArraytableview 中每个部分的一个。当向我的初始对象数组添加另一个SUPDataValue对象并切换回我的表格视图时,我想从对象数组中重新读取所有对象,并查看这些对象是否存在于我的分层数组中。

我正在使用“objectExists”,它工作得很好......但是......如果我将相同的对象两次添加到我的对象数组中,它将始终假定它存在于一个层中。

这是我的代码:

- (void)setInitialComponents:(NSMutableArray*)components
{
    if (self.componentLayer)
    {
        for (SUPDataValueList *val in components)
        {
            BOOL found = NO;

            for (NSMutableArray *layer in self.componentLayer)
            {
                if ([layer containsObject:val])
                {
                    found = YES;
                }
            }

            if (!found)
            {
                [[self.componentLayer objectAtIndex:0] addObject:val];
            }
        }
    }
    else {
        self.componentLayer = [NSMutableArray array];

        // Add the no-layer layer (section 0)
        [self.componentLayer addObject:[NSMutableArray array]];

        if (self.addMode)
        {
            [[self.componentLayer objectAtIndex:0] addObjectsFromArray:components];
        }
        else {
            for (SUPDataValueList * val in components)
            {
                int layer = [[NSString stringWithFormat:@"%@", [val item:38]] intValue];

                if (self.componentLayer.count < layer)
                {
                    [self.componentLayer insertObject:[NSMutableArray array] atIndex:layer-1];
                }

                [[self.componentLayer objectAtIndex:layer-1] addObject:val];
            }
        }
    }

    [self.tableView reloadData];
}

正如您可能已经猜到的那样,我的问题在这里:

if ([layer containsObject:val])
{
    found = YES;
}

我想检查该数组中是否存在唯一对象(使用内存分配ID或其他东西?)我该怎么做?

4

2 回答 2

4

containsObject 方法将在被比较的基础对象上调用 isEqual:。

除非你在 SUPDataValueList 对象中实现 isEqual:,否则它将简单地进行指针比较,这是 NSObject 中 isEqual 的默认行为。

于 2013-11-06T14:41:28.527 回答
0

您正在寻找-[NSArray indexOfObjectIdenticalTo:],它使用对象的地址来确定匹配。

found = [layer indexOfObjectIdenticalTo:val] != NSNotFound;
于 2013-11-06T19:43:03.370 回答