0

私はコア データを含む iOS アプリケーションを持っています。関数の 1 つで、この方法でアプリケーションの 1 つのビューを表示するための情報をロードします。

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription 
                               entityForName:@"MyDate" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];

NSError *error;

NSArray *fetchedObjects = [managedObjectContext executeFetchRequest:fetchRequest error:&error];

for (NSManagedObject *info in fetchedObjects) {

    if ([[[info valueForKey:@"status"] description] isEqualToString:@"Done"]) {

        NSArray *allTask = [[info valueForKey:@"taskes"] allObjects];
        for (NSManagedObject *task in allTask) {
            NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
            [dateFormatter setDateFormat:@"yyyy-MM-dd"];

            if (IsDateBetweenInclusive([task valueForKey:@"firstDate"], fromDate, toDate)) {

                [taskArray addObject:task];
            }
        }
    }
}

データベース内の情報が少ない場合、上記の方法は高速ですが、データベース内の情報が多い場合、3GS でそのビューを表示するのに数秒かかります。シミュレーターでは高速なので、私の質問は、コアの日付から情報を取得するための高速な方法はありますか? コアデータから取得したい属性と値を使用した高速呼び出しがあるかどうかわかりませんか?

ありがとう

4

2 に答える 2

2

NSPredicate を使用します。https: //developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/CoreData/Articles/cdFetching.html を参照してください。

次のコードは、ステータス フィールドが「完了」に設定されている値のみをフェッチします。

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyDate" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"status == 'Done'"]];

NSError *error;

NSArray *fetchedObjects = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
于 2012-04-17T13:33:36.557 に答える