0

学習のために、ブロックとして書き込もうとしているコードがあります。

NSDictionaryオブジェクトのコレクションであるこのNSMutableArrayがあります。各ディクショナリ内には、キー「time」に関連付けられたNSStringオブジェクトがあります。その辞書に特定の時間が存在するかどうかを調べようとしています。ブロックを使用していなかった場合は、次のようにします。

for( NSDictionary* obj in allTimes ) {
    double aValue = [[obj objectForKey:@"time"] doubleValue];
    if (time == timeX)
        [self doStuff];
}

ブロックを使用して...

__block BOOL found = NO;

[allTimes  enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

double aValue = [[obj objectForKey:@"time"] doubleValue];
NSLog(@"a value=%@", [obj objectForKey:@"time"] );

if (aValue == timeX) {
    *stop = YES;
    found = YES;
}

}];

しかし、これは何も設立していません。すべての「aValue」はゼロになり、すべての[obj objectForKey:@"time"]は空の文字列になります。

4

1 に答える 1

1

このコードは私にとってはうまくいきますが、あなたにとってうまくいかないものは何ですか?あなたの問題を再現するときに私は何か間違ったことをしましたか?

NSMutableArray *array = [NSMutableArray array];
    NSDictionary *dict1 = [NSDictionary dictionaryWithObject:@"hehe" forKey:@"time"];
    NSDictionary *dict2 = [NSDictionary dictionaryWithObject:@"hehe2" forKey:@"time"];                      

    [array addObject:dict1];
    [array addObject:dict2];

    [array  enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

        double aValue = [[obj objectForKey:@"time"] doubleValue];
        NSLog(@"a value=%@", [obj objectForKey:@"time"] );
        NSLog(@"aValue = %d", aValue);
    }];
于 2011-01-08T12:11:02.857 に答える