Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在具有字典的数组中查找IndexOfoObject_Ios_Objective C_Nsmutablearray - Fatal编程技术网

Ios 如何在具有字典的数组中查找IndexOfoObject

Ios 如何在具有字典的数组中查找IndexOfoObject,ios,objective-c,nsmutablearray,Ios,Objective C,Nsmutablearray,这是我的阵列: <__NSCFArray 0x7b6ca390>( { name = kumar; no = 158; }, { name = rajdeep; no = 338; }, { name = smitha; no = 361; }, { name = uma; no = 422; } ) 在哪里 _txtfield.text = @"rajdeep" 我得到一些随机垃圾值,比如2147483647,存储

这是我的阵列:

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

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

此“垃圾值”似乎是
NSNotFound
,使用此方法时应进行检查。长话短说,数组不包含要查找的值。它不起作用,因为您正在查找字符串,但数组包含字典,因此您可能需要搜索例如
{“name”:“rajdeep”,“no”:@338}

或者,要使此操作仅适用于字符串,请使用
NSPredicate
进行筛选,例如:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name ==  %@", valueFromTextbox];
NSArray result = [array filteredArrayUsingPredicate: predicate];
如果你的数组很短,你也可以做一个循环进行比较

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

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

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

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

实现所需的方法之一是循环遍历数组,并针对每个字典测试值


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

我想您想要的是:

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;
int idx=NSNotFound;
对于(int i=0;i

假设您的字典数组是arrLoadCell,这应该可以工作。

这是调试器输出吗?@SebastianDressler是的。但在这种情况下它是。检查第二个索引中的字典,它确实有字符串,但您的搜索方法永远找不到该条目,请参阅我编辑的答案。谢谢@Sebastian。我检查了您的回复,数组结果中有我正在搜索的字典,但我希望字典的索引位于主数组中。我尝试了
NSInteger selectedIndexpath=[self.arrLoadCell indexOfObject:result];
它仍然返回相同的垃圾数据,还是我只能比较
indexOfObject:
方法中的字符串?但是当我选中NSArray.h文件时,该方法接受id
-(NSUInteger)indexOfObject:(id)anObject;
很抱歉,我错过了,现在更新了答案以包含这条信息。哦,好的,谢谢。是的,有道理。那么我该如何继续?我的意思是,在不循环或遍历数组的情况下,我能做些什么?
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;
    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);