我有一个可以添加对象的NSMutableArray。添加的对象是包含一堆SUPDataValue
数据的SUP
个对象。
在另一个视图中,我将此对象数组划分为NSMutableArray
,其中包含NSMutableArray
,用于tableview中的每个部分。
当我将另一个SUPDataValue
对象添加到我的初始Object数组,然后切换回我的表视图时,我想重新读取对象数组中的所有对象,看看我的分层数组中是否存在这些对象。
我正在使用“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或其他内容?) 我该怎么做?
答案 0 :(得分:4)
containsObject方法将在被比较的基础对象上调用isEqual :.
除非你在SUPDataValueList对象中实现isEqual:它只会做一个指针比较,这是NSObject中isEqual的默认行为。
答案 1 :(得分:0)
您正在寻找-[NSArray indexOfObjectIdenticalTo:]
,它使用对象的地址来确定匹配。
found = [layer indexOfObjectIdenticalTo:val] != NSNotFound;