0

この Fetch Request は、iPhone で実行するのに約 10 秒かかります。目標は、各カテゴリから 1 つのランダムなサムネイルを取得することです。fetchlimit = 1 に設定すると、ほとんどの場合同じサムネイルが返されるため、各カテゴリからすべての写真を取得する必要があります。

何か案は ?

    [categoriesArray enumerateObjectsUsingBlock:^(id object, NSUInteger index, BOOL *stop) {

    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Photos"];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"place.subcategory.category == %@", object];
    [request setPredicate:predicate];
    NSError *error;
    NSArray *photosManagedObjectsArray = [managedObjectContext executeFetchRequest:request error:&error];

    NSUInteger randomIndex = arc4random() % [photosManagedObjectsArray count];

    NSManagedObject *photoObject = [photosManagedObjectsArray objectAtIndex:randomIndex];
    UIImage *photoImage = [UIImage imageWithData:[photoObject valueForKey:@"thumbnail"]];   
    UIImage *resizedImage = [photoImage imageCroppedToFitSize:CGSizeMake(IMAGE_WIDTH, IMAGE_HEIGHT)];
    [imagesArray addObject:resizedImage];
    [objectsArray addObject:photoObject];

}];

どうもありがとう!明細書。

4

1 に答える 1

3

すべてのオブジェクトを配列にプルする必要はありません。変えるだけ

NSArray *photosManagedObjectsArray = [managedObjectContext executeFetchRequest:request error:&error];`
NSUInteger randomIndex = arc4random() % [photosManagedObjectsArray count];

これに

NSUInteger count = [managedObjectContext countForFetchRequest:request error:&error];
NSUInteger randomIndex = arc4random() % count;

を使用fetchOffsetして、必要なオブジェクトを 1 つだけ取得します。

[request setFetchOffset:randomIndex];
[request setFetchLimit:1];
于 2012-05-18T16:18:25.660 に答える