2014-12-28 65 views
0

Realm documentation site上的领域迁移示例显示了一个新的NSString对象的示例。这个例子很简单,很好的解释。在NSDictionary中存储各种数据类型的新对象

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

但是NSString以外的对象怎么办?为了创建这些其他数据类型的对象,需要如何修改代码片段?

  • NSDate
  • NSData
  • RLMArray
  • NSIntegerint
  • doublefloatCGFloat
  • long
  • boolBOOL

回答

3

只有ObjC/Cocoa中的某些类型的对象具有这样的文字快捷方式。 (在历史上,NSString实际上的鞋底类与这样的语法,但几个人added recently-ish by the Clang compiler。)

没有为NSDate没有文字语法,NSData,或RLMArray;这些需要用适当的施工方法来创建。

原始类型等doublelongBOOL不能直接存储在NSDictionary,但它们可以使用“糖” @(),即包裹起来:

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

这使值成NSNumber例如,然后需要进行解包,以获取原始值:

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

谢谢Josh!这有助于! – iKK

+0

还有一个问题:据我所知,领域迁移做了一个对象枚举([迁移enumerateObjects:Person.className块:^(RLMObject * oldObject,RLMObject * newObject){...}),但是如何创建你提到的适用于更复杂的NSData,NSDate,RLMArray的“适当的构造方法”?你有没有例子,也许?感谢您的帮助! – iKK

+0

我只是指正常的创建方法:'[NSDate date]','[NSData dataWithBytes:]',例如 –

-1

想起来,最好的办法就是,如果你要创建一个O在代码中的内存中启动。 @“”是NSString的简写形式,但也可以使用[NSString stringWithFormat:@“”]以及

+0

不,不要使用'stringWithFormat:',除非你实际上有一个格式化字符串。 –

相关问题