尝试枚举数组并根据与用户默认值的比较选择对象



我有一组字典,它们代表抽认卡。其中一个键值对是pgFinishedNumber和抽认卡出现在工作簿中的页面。用户还在应用程序中设置一个值 pagesDone ,以跟踪他们在工作簿中的进度。

我正在使用一个块来浏览主抽认卡阵列并将卡添加到另一个数组中,称为 myDailyArray .我想移动页码大于pagesDone值的抽认卡,但我有两个问题。

当多个抽认卡具有相同的页码时,会出现第一个问题。发生这种情况时,只有第一张卡包含在myDailyArray 中。当用户指示他所在的页码没有新的抽认卡时,就会出现第二个问题。 发生这种情况时,会提前添加数组中的下一个抽认卡。

我的块的代码,在 viewWillAppear: 中,如下所示:

- (void)viewWillAppear:(BOOL)animated {
//......some code
[theLevelArray.level1Array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop)
{
NSMutableDictionary *dictDaily = [theLevelArray.level1Array objectAtIndex:idx];
[self.myDailyArray addObject:dictDaily];
int pgFinishedNumber = [[dictDaily objectForKey: @"pgFinishedNumber"] intValue];
if (pagesDone <= pgFinishedNumber)
    {
        *stop = YES;
    }  
}]; 

例如,工作簿的第 3 页介绍了两张抽认卡。 这两张卡的NSDictionary s都具有3作为pgFinishedNumber的值。 当我在用户默认pagesDone中输入3然后运行应用程序时,只有这两个中的第一个被添加到myDailyArray。 当我将pagesDone更改为4时,不仅两个pgFinishedNumber值为"3"的抽认卡都会添加到myDailyArray,而且还会添加到下一个对象中,其pgFinishedNumber值为 5!我很困惑。

当到达大于或等于pagesDone的第一个页码时,您将停止迭代。这意味着任何可能具有相同页码的后续页面都将被忽略。

pgFinishedNumber大于(但不等于(pagesDone时,您应该停止迭代,并将 if 语句移动到块的顶部(在添加页面之前(。

我认为

这也应该解决您的第二个问题,我认为这是由于 if 语句位于块的末尾。

这样的事情应该有效:

NSArray *levelArray = [NSArray arrayWithObjects:
        [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:1], @"pgFinishedNumber", nil],
        [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:2], @"pgFinishedNumber", nil],
        [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:3], @"pgFinishedNumber", nil],
        [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:5], @"pgFinishedNumber", nil], nil];
NSMutableArray *myDailyArray = [NSMutableArray array];
int pagesDone = 4;
[levelArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop)
{
    NSMutableDictionary *dictDaily = (NSMutableDictionary *)obj;
    int pgFinishedNumber = [[dictDaily objectForKey: @"pgFinishedNumber"] intValue];
    if (pagesDone < pgFinishedNumber) {
        *stop = YES;
    } else {
        [myDailyArray addObject:dictDaily];
    }
}];
NSLog(@"%@", myDailyArray);

相关内容

最新更新