Core data 核心数据优化获取请求

Core data 核心数据优化获取请求,core-data,Core Data,在iPhone上执行此获取请求几乎需要10秒。 目标是从每个类别中随机获取1个缩略图。 设置fetchlimit=1大多数情况下返回相同的缩略图,因此我必须从每个类别中获取所有照片 有什么想法吗 [categoriesArray enumerateObjectsUsingBlock:^(id object, NSUInteger index, BOOL *stop) { NSFetchRequest *request = [NSFetchRequest fetchRequest

在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];

}];
非常感谢!
比尔。

您不需要将所有对象拉入一个数组。换衣服

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

NSUInteger count = [managedObjectContext countForFetchRequest:request error:&error];
NSUInteger randomIndex = arc4random() % count;
现在使用
fetchOffset
获取所需的单个对象

[request setFetchOffset:randomIndex];
[request setFetchLimit:1];

您不需要将所有对象拉入一个数组。换衣服

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

NSUInteger count = [managedObjectContext countForFetchRequest:request error:&error];
NSUInteger randomIndex = arc4random() % count;
现在使用
fetchOffset
获取所需的单个对象

[request setFetchOffset:randomIndex];
[request setFetchLimit:1];

尝试将
NSFetchRequest的
fetchOffset
属性用作0到(numberOfPics-1)的随机整数谢谢,我完全忽略了fetchOffset。尝试将
NSFetchRequest的
fetchOffset
属性用作0到(numberOfPics-1)的随机整数谢谢,我完全忽略了fetchOffset。非常感谢。我完全忽略了你的存在。非常感谢。我完全忽视了他的存在。