سؤال

I have a code that I am trying to write as block, for the sake of learning.

I have this NSMutableArray that is a collection of NSDictionary objects. Inside each dictionary there's a NSString object associated to the key "time". I am trying to find if a given time is present on that dictionary. If I was not using blocks I would do this:

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

using blocks...

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

}];

but this is never founding anything. All "aValue" are coming as zero and all [obj objectForKey:@"time"] are coming as empty strings.

هل كانت مفيدة؟

المحلول

This code works for me, what doesn't work for you? Did I do something wrong when recreating your problem?

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);
    }];
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top