尝试在NSMutableArray中获取对象的索引。它返回一些垃圾值,而不是为什么它没有返回特定项的索引。下面是我试过的代码。
NSString *type = [dictRow valueForKey:@"type"];
if([arrSeatSel indexOfObject:type])
{
NSUInteger ind = [arrSeatSel indexOfObject:type];
[arrTotRows addObject:[arrSeatSel objectAtIndex:ind]];
}
类型包含值“Gold”。并且arrSeatSel包含
(
"Gold:0",
"Silver:0",
"Bronze:1"
如何检查。请指导。
答案 0 :(得分: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:
文档。
希望能回答你的所有问题。
答案 1 :(得分: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];
}];
答案 2 :(得分:1)
您可以尝试这样做。
[arrSeatSel enumerateObjectsUsingBlock:^(id object, NSUInteger idx, BOOL *stop) {
// object - will be your "type"
// idx - will be the index of your type.
}];
希望这会有所帮助。
答案 3 :(得分:1)
如果我正确阅读,您说arrSeatSel
包含三个NSString
,@"Gold:0"
,@"Silver:0"
和@"Bronze:1"
, ?
然后您的NSString* type
基本上是@"Gold"
第一件事是Gold
,而Gold:0
是不同的字符串,而这只是初学者。
当您在数组中搜索字符串时,您应该取出每个字符串,并进行字符串匹配,而不仅仅是比较。我所说的是:
NSString* str1 = @"This is a string";
NSString* str2 = @"This is a string";
if ( str1 == str 2 ) NSLog(@"Miracle does happen!")
条件永远不会成立,即使两个NSString
包含相同的值,它们是不同的对象,因此是指向不同内存块的不同指针。
这里你应该做的是字符串匹配,我会在这里推荐NSString
的{{1}}方法,因为它似乎符合你的需要。