Sorry I replied too quickly and didn't read properly. Overwriting the init method of a Cocoa class subclass is not recommended. Here is an example of what I was suggesting:
http://github.com/mattetti/phileas_frog/blob/master/image_layer.rb#L44 Which then get called there: http://github.com/mattetti/phileas_frog/blob/master/game_controller.rb#L57 In any cases, you still need to call init (or super if you overwrite initialize) and you need to return self. I hope that helps. - Matt On Thu, Jan 21, 2010 at 4:09 PM, steve ross <cwdi...@gmail.com> wrote: > So, this class doesn't reopen a Cocoa class, it subclasses it. Same anyhow? > The real problem is that the class is instantiated as a side effect of nib > loading, and the only place I've been able to successfully set initial state > is awakeFromNib. I either can't, or don't know how to make the nib load > process call a DuplicateCounterTextField.initWithSomeCoolState method. My > impression is that awakeFromNib is a poor place for setting initial state > because the order in which awakeFromNib's are called is undefined (or is > it?). Not to overcomplicate things, but the controller needs to be able to > tweak the state of the control -- for example, to change the splitter regex. > > Thanks for helping out here. > > Steve > > On Jan 21, 2010, at 3:25 PM, Matt Aimonetti wrote: > > When reopening a Cocoa class, you should not overwrite initialize and if > you were to do it anyway, don't forget to call super and to return self. > The Cocoa way is to create your own initializer to end up with something > like DuplicateCounterTextField.alloc.initWithDuplicate > > Also, remember that when initializing a Cocoa class, you need to do > DuplicateCounterTextField.alloc.init > > - Matt > > > On Thu, Jan 21, 2010 at 3:20 PM, steve ross <cwdi...@gmail.com> wrote: > >> I'm sure this is an elementary question, but I have the class below. In >> IB, I set several NSTextField controls to this class. Everything works in >> the blah, blah, blah part, but strangely enough the >> >> puts "initialize dctf" >> >> never seems to be called. Any thoughts as to why? >> >> require 'strings' >> >> class DuplicateCounterTextField < NSTextField >> include Strings >> >> attr_accessor :splitter, :completions >> attr_accessor :wordCount, :duplicateCount >> >> def initialize >> puts "initialize dctf" >> @splitter = /\W+/ >> @wordCount = 0 >> @cachedWordCount = 0 >> @duplicateCount = 0 >> end >> >> # blah, blah, blah working code >> >> def textDidChange(notification) >> words = stringValue.split(@splitter) >> @wordCount = words.length >> @duplicateCount = @wordCount - words.uniq.length >> >> if >> delegate.respond_to?('controlCountDidChange:wordCount:duplicateCount:') >> delegate.controlCountDidChange(self, >> wordCount:@wordCount, >> duplicateCount:@duplicateCount) >> end >> end >> >> # etc. >> end >> _______________________________________________ >> MacRuby-devel mailing list >> MacRuby-devel@lists.macosforge.org >> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel >> > > _______________________________________________ > MacRuby-devel mailing list > MacRuby-devel@lists.macosforge.org > http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel > > > > > _______________________________________________ > MacRuby-devel mailing list > MacRuby-devel@lists.macosforge.org > http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel > >
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel