Чтобы правильно сохранить CLLocation без потери информации, используйте NSKeyedArchiver следующим образом:
CLLocation *myLocationToStore = ...; // (a CLLocation object)
NSData *locationData = [NSKeyedArchiver archivedDataWithRootObject:myLocationToStore];
Затем его можно заархивировать в NSUserDefaults, а также декодировать так же просто, как при извлечении его с помощью NSKeyedUnarchiver:
CLLocation *myStoredLocation = (CLLocation *)[NSKeyedUnarchiver unarchiveObjectWithData:locationData];
Эквивалентные функции Swift :
class func archivedDataWithRootObject(_ rootObject: AnyObject) -> NSData]
class func unarchiveObjectWithData(_ data: NSData) -> AnyObject?