我如何在具有字典的数组中找到indexOfObject

时间:2015-01-20 11:14:53

标签: ios objective-c nsmutablearray

这是我的阵列:

<__NSCFArray 0x7b6ca390>(
{
    name = kumar;
    no = 158;
},
{
    name = rajdeep;
    no = 338;
},
{
    name = smitha;
    no = 361;
},
{
    name = uma;
    no = 422;
}
)

这就是我想要做的事情

NSInteger selectedIndexpath=[self.arrLoadCell indexOfObject:_txtfield.text];

其中

_txtfield.text = @"rajdeep"

我得到一些随机垃圾值,如2147483647,存储在selectedIndexPath中。 我错过了什么吗?或者还有其他方法来处理它吗?

5 个答案:

答案 0 :(得分:3)

这个&#34;垃圾值&#34;似乎是NSNotFound,在使用此方法时应该检查。简而言之,您的数组不包含您正在寻找的值。它不起作用,因为你正在寻找一个字符串,但数组包含字典,所以你也要搜索​​例如字典。 { "name" : "rajdeep", "no" : @338 }

或者,要仅使用字符串进行此操作,请使用NSPredicate进行过滤,例如

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name ==  %@", valueFromTextbox];
NSArray result = [array filteredArrayUsingPredicate: predicate];

如果您的阵列非常短,您也可以进行循环比较。

更新以获取索引,使用谓词的结果作为输入,例如

NSInteger selectedIndexpath = [self.arrLoadCell indexOfObject:result.firstObject];

答案 1 :(得分:3)

indexOfObject:需要存储在数组中的实际对象。您只提供其中一个词典的键值。

您可以实现所需的一种方法是循环遍历数组,并为每个字典测试值。

您获得的“垃圾值”是NSNotFound,这意味着找不到该对象。

答案 2 :(得分:0)

那是因为你的数组包含字典,而不是字符串。您无法将String(textfield.text)与数组中的字典进行比较。

答案 3 :(得分:0)

我认为你想要的是:

int idx = NSNotFound;
for (int i=0; i<self.arrLoadCell.count; i++) {
    NSDictionary *dict = [self.arrLoadCell objectAtIndex:i];
    if ([[dict objectForKey:@"name"] isEqualToString:_txtfield.text]) {
        idx = i;
        break;
    }
}
NSInteger selectedIndexpath=idx;

答案 4 :(得分:0)

    NSUInteger indexPath = 0;
    for (NSDictionary *dic in arrLoadCell){
        if ([[dic objectForKey:@"name"] isEqualToString: _txtfield.text]) {
            indexPath=[arrLoadCell indexOfObject:dic];
            break;
        }
    }
    NSLog(@"%lu is the indexPATH",(unsigned long)indexPath);

假设你的字典数组是arrLoadCell,这应该可行。