0

NSMutableArray 内のオブジェクトのインデックスを取得しようとしています。特定のアイテムのインデックスを返さない理由を取得せずに、ガベージ値を返しています。以下は私が試したコードです。

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

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

type には値「Gold」が含まれます。そして 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"は金型の円で、そのカウントが 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 に答える