Оформление базовых данных методами сортировки и сравнения - PullRequest
0 голосов
/ 17 декабря 2009

У меня есть несколько NSManagedObjects, и я хотел бы написать методы для сортировки и сравнения свойств по ним.

Моя проблема в том, что, поскольку Core Data определяет свойства как @dynamic, на них нельзя ссылаться во время компиляции. Это означает, что декорирование NSManagedObject такими методами:

- (NSComparisonResult) compareDateAndTime:(Event *) event {
    return [originDate compare:[event originDate]];
}

приведет к тому, что компилятор не сможет найти свойство с именем «originDate». Вышеуказанный метод называется так:

NSArray *events = [[NSArray alloc] 
      initWithArray:[unsortedEvents sortedArrayUsingSelector:@selector(compareDateAndTime:)]];

Я мог бы использовать предикаты или fetchedResultController, но я хотел бы построить их как сам метод, поскольку у меня есть идентичные NSObjects для каждого NSManagedObject. Этот NSObject действует как временный объект, который передается и заполняется до того, как его свойства устанавливаются для NSManagedObject, который затем сохраняется. У меня также есть некоторые другие функции, такие как специализированные средства доступа, которые я хотел бы добавить в NSManagedObject.

** (1) ** Есть ли общий / лучший способ украшения объектов NSManagedObject с помощью методов и функций ** (2) ** и Xcode не перезаписывает их при «перестройке» класса для сущности?

Спасибо за любую помощь или "RTFM", данный:)

Ответы [ 2 ]

2 голосов
/ 17 декабря 2009

Я довольно часто заново генерирую классы моделей для своих сущностей, поэтому я добавил вспомогательные методы (включая реализации геттеров для переходных свойств) как категории «Поддержка» в классах моделей.

Мне никогда не нужно изменять файлы классов модели, и я никак не могу случайно перезаписать свои дополнительные методы.

Например, сущность «Поместить» может иметь строку имени и номера широты / долготы. Он также может иметь временное свойство для первой буквы имени. Это можно использовать как путь к ключу имени раздела для заголовков указателей разделов в большом табличном представлении.

Xcode сгенерирует файлы классов для объекта «Поместить», как это:

Place.h:

#import <CoreData/CoreData.h>

@interface Place :  NSManagedObject  
{
}

@property (nonatomic, retain) NSString * placeName;
@property (nonatomic, retain) NSNumber * latitude;
@property (nonatomic, retain) NSNumber * longitude;

@end

Place.m:

#import "Place.h"

@implementation Place 

@dynamic placeName;
@dynamic latitude;
@dynamic longitude;

@end

Я создаю категорию «Поддержка» в классе «Место».

PlaceSupport.h

@interface Place (Support)

- (NSString *)uppercaseFirstLetterOfName;
- (CLLocation*)location;

@end

и реализовать его в PlaceSupport.m

0 голосов
/ 17 декабря 2009

Можете ли вы использовать objectForKey:?

С другой стороны, у меня не было проблем с использованием свойств непосредственно в моем коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...