1

我有一系列字典,代表抽认卡。其中一个键值对是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 页介绍了两张抽认卡。这两张卡的NSDictionarys 都具有3的值pgFinishedNumber。当我输入3用户默认值pagesDone然后运行应用程序时,只有这两个中的第一个被添加到myDailyArray. 当我将 更改为pagesDone4,不仅将两个pgFinishedNumber值为“3”的抽认卡添加到myDailyArray,而且下一个对象的pgFinishedNumber值为5! 我很迷惑。

4

1 回答 1

1

当达到大于或等于 的第一个页码时,您将停止迭代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);
于 2012-05-07T20:40:31.220 回答