То, как отсортировать Базовые Данные, выбрало свойства

Для моих собратьев-ксамарианцев, вот Xamarin.iOS C # версия ответа @Paul Lynch.

private UIImage ResizeImage(UIImage image, CGSize newSize) 
{
    UIGraphics.BeginImageContextWithOptions(newSize, false, 0.0f);
    image.Draw(new CGRect(0, 0, newSize.Width, newSize.Height));
    UIImage newImage = UIGraphics.GetImageFromCurrentImageContext();
    UIGraphics.EndImageContext();
    return newImage;
}
20
задан Daniel Dickison 2 July 2009 в 13:07
поделиться

4 ответа

Похоже, что у инструмента моделирования нет способа установить дескрипторы сортировки в запросе выборки.

Должно быть возможно [1] после загрузки модели, но до связывания с помощью постоянного координатора хранилища, чтобы найти описания выбранных свойств, для которых вы хотите управлять порядком сортировки, и заменить их запросы выборки запросами выборки, для которых установлены дескрипторы сортировки.

[1] В принципе это должно работать. На практике я этого не делал и не тестировал.

5
ответ дан 29 November 2019 в 23:00
поделиться

Вы не указываете их в графическом редакторе (насколько мне известно).

Вы указываете их в коде, в котором вы выполняете выборку.

NSFetchRequest* request = [[NSFetchRequest alloc] init];
NSEntityDescription* entity = [NSEntityDescription entityForName:@"whatYouAreLookingFor"
    inManagedObjectContext:self.managedObjectContext];
[request setEntity:entity];

// here's where you specify the sort
NSSortDescriptor* sortDescriptor = [[NSSortDescriptor alloc]
                                initWithKey:@"name" ascending:YES];
NSArray* sortDescriptors = [[[NSArray alloc] initWithObjects: sortDescriptor, nil] autorelease];
[request setSortDescriptors:sortDescriptors];
[sortDescriptor release];

fetchedResultsController = [[NSFetchedResultsController alloc]
               initWithFetchRequest:request
               managedObjectContext:self.managedObjectContext
                 sectionNameKeyPath:nil
                          cacheName:@"myCache"];
13
ответ дан 29 November 2019 в 23:00
поделиться

К сожалению, возможность сортировки несколько ограничена. Например, вы не можете взять поле, которое представляет собой NSString, содержащее число, и отсортировать его численно, по крайней мере, с резервным хранилищем SQLite. Пока вы сортируете строки в алфавитном порядке, численно только по значениям, хранящимся в виде чисел и т. Д., Тем не менее, NSSortDescriptor, примененный к запросу на выборку, работает нормально.

0
ответ дан 29 November 2019 в 23:00
поделиться

Фактически вы можете получить свойство извлечения модели и добавить к нему дескрипторы сортировки (опять же, в коде). Я сделал это стандартным методом, который XCode генерирует в вашем AppDelegate, если вы выберете один из шаблонов с Core Data:

Кстати. Это сортирует ВСЕ выбранные свойства для ВСЕХ моделей в вашей модели данных. С его помощью можно было придумать что-то необычное и адаптивное, но это был наиболее лаконичный способ сортировки 7 отдельных моделей, каждая из которых извлекала свойства, которые необходимо было отсортировать по имени. Работает хорошо.

/**
 Returns the managed object model for the application.
 If the model doesn't already exist, it is created by merging all of the models found in the application bundle.
 */
- (NSManagedObjectModel *)managedObjectModel {

    if (managedObjectModel != nil) {
        return managedObjectModel;
    }
    managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];    

    // Find the fetched properties, and make them sorted...
    for (NSEntityDescription *entity in [managedObjectModel entities]) {
        for (NSPropertyDescription *property in [entity properties]) {
            if ([property isKindOfClass:[NSFetchedPropertyDescription class]]) {
                NSFetchedPropertyDescription *fetchedProperty = (NSFetchedPropertyDescription *)property;
                NSFetchRequest *fetchRequest = [fetchedProperty fetchRequest];

                // Only sort by name if the destination entity actually has a "name" field
                if ([[[[fetchRequest entity] propertiesByName] allKeys] containsObject:@"name"]) {
                    NSSortDescriptor *sortByName = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
                    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:sortByName]];
                    [sortByName release];
                }
            }
        }
    }

    return managedObjectModel;
}
35
ответ дан 29 November 2019 в 23:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: