我的應用通過歸檔具有屬性的類的實例將設置保存到iOS設備上的文件。該類使用NSCoding協議,因此,我使用encodeWithCoder對這些屬性進行編碼。然後,我嘗試使用諸如tempInt = decoder.decodeIntegerForKey("profileFlags") as Int
如何從decodeIntegerForKey而不是0獲得可選項?
這樣的命令將這些文件讀回到內存中,目前爲止這種方法運行良好,但現在我需要能夠存儲其他屬性並檢索它們。本質上,這個存檔對象的結構正在改變,但用戶已經擁有舊結構的文件(屬性更少)。如果用戶具有新結構的文件(附加屬性),那麼我想閱讀它們。如果不是,我希望能夠執行代碼來處理它並提供默認值。
我嘗試使用不存在的鍵tempInt = decoder.decodeIntegerForKey("nonExistentKey") as Int
,希望得到一個零值,但它返回一個零。不幸的是,這是我真的需要一個可選的地方,因爲0是一個有效的值。
我能找到的最近的幫助文章是Swift: decodeObjectForKey crashes if key doesn't exist,但這似乎並不適用於此。這看起來像decodeObjectForKey返回一個可選的和decodeIntegerForKey返回一個Integer。
有關如何做到這一點的任何想法?
「如果編碼的整數不適合默認的整數大小,則該方法產生一個NSRangeException。不幸的是,在Swift中很難處理這個問題。 – jtbandes