这是我的阵列:
<__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中。 我错过了什么吗?或者还有其他方法来处理它吗?
答案 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,这应该可行。