#916: NSKeyedArchiver/Unarchiver generates multiple copies of the same object ---------------------------------+------------------------------------------ Reporter: mred@… | Owner: lsansonetti@… Type: defect | Status: closed Priority: major | Milestone: Component: MacRuby | Resolution: invalid Keywords: | ---------------------------------+------------------------------------------ Changes (by lsansonetti@…): * status: new => closed * resolution: => invalid Old description:
{{{ $ cat test.rb class A attr_accessor :a
def initWithCoder coder @a = coder.decodeObjectForKey 'a' self end
def encodeWithCoder coder coder.encodeObject @a, forKey:'a' end end
a = A.new b = A.new
a b.a = a
puts(a == b.a)
data = NSKeyedArchiver.archivedDataWithRootObject a a = NSKeyedUnarchiver.unarchiveObjectWithData data
puts(a == b.a)
$ macruby test.rb true false }}}
New description: {{{ $ cat test.rb class A attr_accessor :a def initWithCoder coder @a = coder.decodeObjectForKey 'a' self end def encodeWithCoder coder coder.encodeObject @a, forKey:'a' end end a = A.new b = A.new a b.a = a puts(a == b.a) data = NSKeyedArchiver.archivedDataWithRootObject a a = NSKeyedUnarchiver.unarchiveObjectWithData data puts(a == b.a) $ macruby test.rb true false }}} -- Comment: That seems perfectly normal: the unarchiver will return a new instance every time. Messaging #== will return false as the two objects are not the same instance. You will have to overwrite the method. This will behave the same in Objective-C, as -isEqual: also does pointers comparison. -- Ticket URL: <http://www.macruby.org/trac/ticket/916#comment:3> MacRuby <http://macruby.org/>