我有一个包含NSMutableDictionary值的NSMutableArray。我必须确定NSMutableArray中是否存在特定的字典值?
的NSMutableArray:
表资料:
{
{
categories = 267;
"category_ids" = 267;
"created_at" = "2012-04-18 05:32:10";
"custom_design_from" = "2010-12-03 00:00:00";
}
{
categories = 267;
"category_ids" = 267;
"created_at" = "2012-04-18 05:32:10";
"custom_design_from" = "2010-12-03 00:00:00";
}
}
我必须识别一个特定的字典值。
我的代码:
if ( [tableData containsObject:[appDelegate.Product objectAtIndex:i]] )
{
// Return Always false...
}
答案 0 :(得分:2)
据我所知,containsObject:
方法通过向其中的所有实例发送isEqual:
消息来检查数组是否包含给定对象。 NSDictionary类有方法isEqualToDictionary:表示comares字典的内容。你可以尝试像这样制作smth
- (BOOL) dictionaryArray:(NSMutableArray*)array containsDictionary:(NSDictionary*)givenDictionary
{
BOOL result = NO;
for( NSDictionary* dict in array )
{
if( [dict isEqualToDictionary:givenDictionary] )
{
result = YES;
}
}
return result;
}
如果您的数组通过调用
包含给定的字典,则此方法应返回NSDictionary* dict = [appDelegate.Product objectAtIndex:i];
if ( [self dictionaryArray:tableData containsDictionary:dict] )
{
// do what you need
}
答案 1 :(得分:0)
如果2个词典包含相同的数据但它们不是同一个对象,则可能发生这种情况
例如(NSDictionary
)
NSDictionary *d1 = [NSDictionary dictionaryWithObject:@"1" forKey:@"1"];
NSDictionary *d2 = [NSDictionary dictionaryWithObject:@"1" forKey:@"1"];
if(d1 == d2)
//Does note get called
s1具有相同的s2数据 但是对象是不同的 所以正常的平等测试永远不会起作用
这可能是你发生的事情 您可能有2个具有相同数据结构的词典但它们实际上不是同一个对象
您必须通过测试NSDictionary中的实际字符串或ID来详细说明您的词典
答案 2 :(得分:0)
包含identic数据的两个对象通常不相同。一个例子:
NSMutableArray* array1 = [NSMutableArray arrayWithObjects:@"a", nil];
NSMutableArray* array2 = [NSMutableArray arrayWithObjects:@"x", @"y", nil];
NSMutableArray* array3 = array2;
现在,当然,array1是一个与array2不同的对象,而array2和array3是相同的objekt。
1: a
2: x, y
3: x, y
所以,让我们改变其中一个:
[array1 replaceObjectAtIndex:0 withObject:@"x"];
[array1 addObject:@"y"];
现在所有三个数组都有相同的内容,但array1和array2仍然是不同的对象:
1: x, y
2: x, y
3: x, y
让我们做另一个改变:
[array2 addObject:@"z"];
由于array1是与array2不同的对象,因此更改数组2不会影响array1。 但是array2与array3相同(array2和array3只是同一个东西的两个名字):
1: x, y
2: x, y, z
3: x, y, z