0

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

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

if([arrSeatSel indexOfObject:type])
{
    NSUInteger ind = [arrSeatSel indexOfObject:type];
    [arrTotRows addObject:[arrSeatSel objectAtIndex:ind]];
}

类型包含值“黄金”。并且 arrSeatSel 包含

 (
"Gold:0",
"Silver:0",
"Bronze:1"

如何检查。请指导。

4

4 回答 4

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]];
}

更新

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

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

在我的第一个示例中,/* 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]];
}

-indexOfObjectPassingTest:更喜欢。

[obj hasPrefix:type]部分只是比较字符串的一种不同方式。阅读-hasPrefix:文档以获取更多详细信息。

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

于 2013-06-05T11:31:19.890 回答
2

有时正确存储数据可以解决很多麻烦。如果我猜对了

"Gold:0"表示一个 Gold 类型的圆圈,其计数为 0。

您可以尝试将其重新格式化为一组项目。

[
    {
        "Type": "Gold",
        "Count": 0
    },
    {
        "Type": "Silver",
        "Count": 0
    },
    {
        "Type": "Bronze",
        "Count": 1
    }
]

然后使用谓词查找索引

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"Type == %@",@"Gold"];
NSUInteger index = [types indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
    [predicate evaluateWithObject:obj];
}];
于 2013-06-05T12:00:26.677 回答
1

你可以尝试这样做。

[arrSeatSel enumerateObjectsUsingBlock:^(id object, NSUInteger idx, BOOL *stop) {

    // object - will be your "type"
    // idx - will be the index of your type.
}];

希望这可以帮助。

于 2013-06-05T11:30:49.893 回答
1

如果我没看错,你是说arrSeatSel包含三个NSStrings, @"Gold:0", @"Silver:0", and @"Bronze:1",对吗?

然后你NSString* type基本上是@"Gold"

首先是GoldGold:0是不同的字符串,这只是开始。

当您在数组中搜索字符串时,您应该取出每个字符串,并进行字符串匹配,而不仅仅是比较。我要说的是:

NSString* str1 = @"This is a string";
NSString* str2 = @"This is a string";
if ( str1 == str 2 ) NSLog(@"Miracle does happen!")

即使两个NSStrings 包含相同的值,条件也永远不会为真,它们是不同的对象,因此是指向不同内存块的不同指针。

您应该在这里做的是字符串匹配,我会在这里推荐NSString'shasPrefix:方法,因为它似乎符合您的需要。

于 2013-06-05T11:36:44.743 回答