Skip to content

Instantly share code, notes, and snippets.

@sajoku
Created July 8, 2013 09:11
Show Gist options
  • Save sajoku/5947368 to your computer and use it in GitHub Desktop.
Save sajoku/5947368 to your computer and use it in GitHub Desktop.
Rubymotion 2.3 crashes when using NSKeyedUnarchiver. Replay this by doing: user = User.new(name: 'name') user.save User.load
class User
KEY = 'user'
PROPERTIES = [:name, :id]
PROPERTIES.each { |prop|
attr_accessor prop
}
def initialize(attributes = {})
attributes.each { |key, value|
self.send("#{key}=", value) if PROPERTIES.member? key.to_sym
}
end
# this is an initializer, so should return `self`
def initWithCoder(decoder)
self.init
self.name = decoder.decodeObjectForKey('name')
self.id = decoder.decodeObjectForKey('id')
self
end
# called when saving an object to NSUserDefaults
def encodeWithCoder(encoder)
encoder.encodeObject(self.name, forKey: 'name')
encoder.encodeObject(self.id, forKey: 'id')
end
def save
defaults = NSUserDefaults.standardUserDefaults
post_as_data = NSKeyedArchiver.archivedDataWithRootObject(self)
defaults[KEY] = post_as_data
end
def self.load
defaults = NSUserDefaults.standardUserDefaults
user_as_data = defaults[KEY]
NSKeyedUnarchiver.unarchiveObjectWithData(user_as_data)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment