2

このコードの何が問題になっていますか?

私はこれがばかげた述語であることを知っています。しかし、これが機能している場合は、すべてを除外する必要があることを示すためだけですよね?

どういうわけか、そうではありません。DB ですべての Month オブジェクトを取得していますが、何も取得していないはずです。

これは、問題が述語にない可能性があることを示していると思いますか?

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Month" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];

[fetchRequest setPredicate: [NSPredicate predicateWithFormat:@"1 == 0"]];

NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] initWithKey:@"month_" ascending:YES];

    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor1, nil];
    [fetchRequest setSortDescriptors:sortDescriptors];
[fetchRequest setFetchBatchSize:20];

NSFetchedResultsController *theFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
                                    managedObjectContext:managedObjectContext
                                      sectionNameKeyPath:@"month_"
                                               cacheName:@"Root"];



- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return [[_fetchedResultsController sections] count];
}

私が実際にやりたかったことは、

[NSPredicate predicateWithFormat:@"year.year_ == %d", year]

そして、私もこれを試しました、

[NSPredicate predicateWithFormat:@"month_ == %d", 1]

それが機能するかどうかを確認するだけです。しかし、何もありません。

編集:

この時点で、どのような述語を設定しても、それが有効で適切にフォーマットされた述語である限りは問題ありません。それは文句を言わず、すべてのオブジェクトを取得します。何もフィルタリングしていないだけです。

私はほとんどの場合、Apple のドキュメントのボイラー プレート コードを使用しています。

誰でもこれを理解するのを手伝ってもらえますか?

ありがとうございました!

4

1 に答える 1

1

キャッシュを使用している場合は、再利用する前に fetchRequest のキャッシュを削除する必要があります。

deleteCacheWithName: を呼び出すと、問題が修正されました。

于 2012-09-08T22:48:34.210 に答える