1

フラッシュカードを表す一連の辞書があります。キーと値のペアの 1 つはpgFinishedNumber、フラッシュカードがワークブックに表示されるページです。pagesDoneユーザーは、ワークブックの進行状況を追跡するために、アプリで値も設定します。

ブロックを使用して、マスター フラッシュカード アレイを通過し、カードを という別のアレイに追加しますmyDailyArray。ページ番号が の値より大きいフラッシュカードをpagesDone移動したいのですが、2 つの問題があります。

最初の問題は、複数のフラッシュカードに同じページ番号がある場合に発生します。この場合、最初のカードのみが に含まれ myDailyArrayます。2 番目の問題は、新しいフラッシュ カードがないページ番号にいることをユーザーが示した場合に発生します。これが発生すると、アレイ内の次のフラッシュカードが事前に追加されます。

にある私のブロックのコードは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 ページでは、2 つのフラッシュ カードが紹介されています。これらNSDictionary2 枚のカードの は、両方とも3の値として を持っていますpgFinishedNumber3ユーザーのデフォルトを入力しpagesDoneてアプリを実行すると、最初の 2 つだけが に追加されmyDailyArrayます。を に変更するpagesDoneと、 「3」4の値を持つ両方のフラッシュカードがに追加されるだけでなく、値が!の次のオブジェクトも追加されます。私は当惑しています。pgFinishedNumbermyDailyArraypgFinishedNumber5

4

1 に答える 1

1

以上の最初のページ番号に達したときに反復を停止していますpagesDone。つまり、同じページ番号を持つ可能性のある後続のページはすべて無視されます。

pgFinishedNumberより大きい (しかし等しくない)場合は反復を停止し、pagesDone(ページを追加する前に) if ステートメントをブロックの先頭に移動する必要があります。

これは、if ステートメントがブロックの最後にあることに起因すると思われる 2 番目の問題も修正する必要があると思います。

このようなものが動作するはずです:

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 に答える