Есть ли какое-то удобное решение, чтобы избежать явного преобразования NSNumber в int?


Я использую базовые данные, поэтому все мои числа-NSNumbers (поскольку это старая модель, я не использовал скалярное автоматическое преобразование, которое, похоже, доступно для новых базовых данных).

Итак, мой код полон следующих операторов преобразования:

[myNSNumberFromCoreDataObject intValue]   which is pretty annoying...

Есть ли какое-либо удобное решение для этого, или я попал в ловушку, так как я не мог использовать скалярное моделирование основных данных?

Править: В идеале можно было бы написать какой-то препроцессорный оператор, который проверяет эти случаи и автоматически просто заменяет это автоматически - возможно ли это как-то?

2 3

2 ответа:

Вы всегда можете объявить свойства управляемых объектов как скаляры и обрабатывать преобразование в геттерах/сеттерах. Пример:

Заголовок

@interface MyEntity : NSManagedObject

@property (nonatomic, assign, readwrite) NSUInteger count;

@end

Реализация

@interface MyEntity ()

@property (nonatomic, retain, readwrite) NSNumber* dbCount;

@end

@implementation MyEntity

@dynamic dbCount;

- (void)setCount:(NSUInteger)count {
    self.dbCount = [NSNumber numberWithUnsignedInteger:count];
}

- (NSUInteger)count {
    return [self.dbCount unsignedIntegerValue];
}

@end

Вы можете написать метод category в своем подклассе NSManagedObject, который возвращает int, например

- (int)myNumberInt
{
    return [self.myNumber intValue];
}