---
title: "[EP] Migrating old data"
slug: ep-migrating-old-data
section: tech
date: 2015-06-16T11:12:00.000Z
canonical: https://roland.leth.ro/blog/tech/ep-migrating-old-data
---

First things first, I want to migrate old users' data to Swift objects:

```objc
// Didn't want to use CoreData just for one object, so I was creating an array of arrays: 
// array[0] = recurring time, array[2] = name, etc. 
// Don't laugh, it was a long time ago :)
unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData: dat];
kConstants.allTheData = [unarchiver decodeObjectForKey: @"dic"];
[unarchiver finishDecoding];
```

to:

```swift
let unarchiver = NSKeyedUnarchiver(forReadingWithData: decryptedData)

if let events = unarchiver.decodeObject(forKey: "data") as? [EPEvent] {
  EPEvent.data = events
}
else if let oldData = unarchiver.decodeObject(forKey: "dic") as? [Any] {
  Utils.migrate(oldData)
}
else {
  EPEvent.data = []
}

unarchiver.finishDecoding()
```

where `migrateOldData` is:

```swift
// The fallbacks should never happen, but it doesn't hurt to be extra sure.
for event: [Any] in data {
  let event = EPEvent(
    recurring: event[0] as? String ?? EPEvent.recurring,
    sum: event[1] as? Float ?? 0.0,
    name: event[2] as? String ?? "Invalid data",
    eventComponents: event[3] as? DateComponents ?? EPEvent.alertTime,
    reminderComponents: event[4] as? DateComponents ?? EPEvent.alertTime,
    fireTime: event[5] as? String ?? "Day of event",
    repeats: event[6] as? String ?? "None"
  )
  
  EPEvent.data.append(event)
}

saveData() // This just writes to file, encrypted
```

Trying it out:

```swift
print(EPEvent.data.first?.recurring)
// -- Optional("Daily")
```
