Для моих собратьев-ксамарианцев, вот 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;
}
Похоже, что у инструмента моделирования нет способа установить дескрипторы сортировки в запросе выборки.
Должно быть возможно [1] после загрузки модели, но до связывания с помощью постоянного координатора хранилища, чтобы найти описания выбранных свойств, для которых вы хотите управлять порядком сортировки, и заменить их запросы выборки запросами выборки, для которых установлены дескрипторы сортировки.
[1] В принципе это должно работать. На практике я этого не делал и не тестировал.
Вы не указываете их в графическом редакторе (насколько мне известно).
Вы указываете их в коде, в котором вы выполняете выборку.
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"];
К сожалению, возможность сортировки несколько ограничена. Например, вы не можете взять поле, которое представляет собой NSString, содержащее число, и отсортировать его численно, по крайней мере, с резервным хранилищем SQLite. Пока вы сортируете строки в алфавитном порядке, численно только по значениям, хранящимся в виде чисел и т. Д., Тем не менее, NSSortDescriptor, примененный к запросу на выборку, работает нормально.
Фактически вы можете получить свойство извлечения модели и добавить к нему дескрипторы сортировки (опять же, в коде). Я сделал это стандартным методом, который 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;
}