2014-12-28 3 views
0

Пример миграции Realm на Realm documentation site показывает пример с новым объектом NSString. Пример прост и хорошо объяснен.Хранение новых объектов различных типов данных в NSDictionary

if (oldSchemaVersion < 2) { 
    newObject[@"email"] = @""; // creates an NSString object... 
} 

Но как насчет объектов, кроме NSString? Каким образом фрагмент кода необходимо адаптировать для создания объектов этих других типов данных?

  • NSDate
  • NSData
  • RLMArray
  • NSInteger, int
  • double, float, CGFloat
  • long
  • bool, BOOL

ответ

3

Только определенные типы объектов в ObjC/Cocoa имеют буквальный ярлык, подобный этому. (Исторически NSString был фактически единственным класса с таким синтаксисом, но некоторые были added recently-ish by the Clang compiler.)

Там не буквальный синтаксис NSDate, NSData или RLMArray; их необходимо создать с помощью соответствующего метода построения.

Примитивные типы как double, long и BOOL не могут храниться непосредственно в NSDictionary, но они могут быть обернуты используя «сахар» @(), то есть:

newObject[@"numFrobs"] = @(anInteger); 

Это помещает значение в NSNumber экземпляр, который затем должен быть развернута, чтобы получить элементарное значение:

NSInteger numFrobs = [newObject[@"numFrobs"] integerValue]; 
+0

Спасибо, Джош! Это уже помогает! – iKK

+0

Еще один вопрос: как я понял, realm-migration делает объект-перечисление ([migration enumerateObjects: Person.className block:^(RLMObject * oldObject, RLMObject * newObject) {...}) - но как бы вы создали «подходящий метод построения», который вы упомянули для более сложных NSData, NSDate, RLMArray? Может, у вас есть пример? Спасибо за любую помощь! – iKK

+0

Я имею в виду обычные методы создания: '[NSDate date]', '[NSData dataWithBytes:]', например. –

-1

лучший способ думать об этом так же, как если бы вы были создать O bject в памяти вашего кода. @ "" является короткой формой для NSString, но вы можете использовать [NSString stringWithFormat: @ ""], а также

+0

Нет, не используйте 'stringWithFormat:', если у вас на самом деле нет строки формата. –

Смежные вопросы