NSMutableArray中的indexOfObject返回垃圾值

iPh*_*lly 0 iphone ios

试图在NSMutableArray中获取对象的索引.它返回一些垃圾值,而不是为什么它不返回特定项的索引.以下是我试过的代码.

NSString *type = [dictRow valueForKey:@"type"];

if([arrSeatSel indexOfObject:type])
{
    NSUInteger ind = [arrSeatSel indexOfObject:type];
    [arrTotRows addObject:[arrSeatSel objectAtIndex:ind]];
}
Run Code Online (Sandbox Code Playgroud)

type包含值"Gold".并且arrSeatSel包含

 (
"Gold:0",
"Silver:0",
"Bronze:1"
Run Code Online (Sandbox Code Playgroud)

怎么检查.请指导.

Jef*_*mas 7

你得到的价值是NSNotFound.你得到NSNotFound因为@"Gold"不等于@"Gold:0".

你应该尝试以下方法

NSUInteger index = [arrSeatSel indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop){
    return [obj hasPrefix:type];
}];

if (index != NSNotFound) {
    [arrTotRows addObject:[arrSeatSel objectAtIndex:index]];
}
Run Code Online (Sandbox Code Playgroud)

UPDATE

-indexOfObjectPassingTest:是一个运行以下循环.注意:/* TEST */某些代码在找到正确的索引时返回true.

NSUInteger index = NSNotFound;
for (NSUInteger i = 0; i < [array count]; ++i) {
   if (/* TEST */) {
       index = i;
       break;
   }
}
Run Code Online (Sandbox Code Playgroud)

在我的第一个样本中,/* TEST */[obj hasPrefix:type].最后的for循环看起来像.

NSUInteger index = NSNotFound;
for (NSUInteger i = 0; i < [arrSeatSel count]; ++i) {
   if ([arrSeatSel[i] hasPrefix:type]) {
       index = i;
       break;
   }
}

if (index != NSNotFound) {
    [arrTotRows addObject:[arrSeatSel objectAtIndex:index]];
}
Run Code Online (Sandbox Code Playgroud)

-indexOfObjectPassingTest:更喜欢.

[obj hasPrefix:type]部分只是比较字符串的另一种方式.阅读-hasPrefix:文档了解更多详情.

希望能回答你的所有问题.