2014-12-28 72 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:',除非你實際上有一個格式化字符串。 –

相關問題