From: Eloy D. <elo...@gm...> - 2007-08-04 16:18:29
|
Yes, that's true. However the problem is not with the NSCell subclass (DownloadCell) but with the NSObject subclass (Download) that holds the values for the cell. If I don't implement the copyWithZone method it exits with a method not found error: 2007-08-04 18:15:29.644 HellaNZB[3861] *** -[Download copyWithZone:]: selector not recognized [self = 0x158c2400] /Users/eloy/Documents/DEVELOPMENT/RubyCocoa/Nzb/hellanzb/build/Release/HellaNZB.app/Contents/Resources/rb_main.rb:22:in `NSApplicationMain': NSInvalidArgumentException - *** -[Download copyWithZone:]: selector not recognized [self = 0x158c2400] (OSX::OCException) from /Users/eloy/Documents/DEVELOPMENT/RubyCocoa/Nzb/hellanzb/build/Release/HellaNZB.app/Contents/Resources/rb_main.rb:22 As you can see the class of the object that it's being called on is Download which is a NSObject subclass. Otherwise I will create a small app and see if I can replicate the problem. Ciao, Eloy On 8/4/07, Laurent Sansonetti <lsa...@ap...> wrote: > copyWithZone: is part of the NSCopying protocol, which NSObject > doesn't implement but NSCell does. > > http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Protocols/NSCopying_Protocol/Reference/Reference.html > > Laurent > > On Aug 4, 2007, at 6:05 PM, Eloy Duran wrote: > > > Hey Lrz, > > > > That would have been very nice! :) > > However unfortunately NSObject doesn't implement copyWithZone... > > > >>> foo = OSX::NSObject.alloc.init > > => #<OSX::NSObject:0x2e00e class='NSObject' id=0x159ac60> > >>> foo.objc_methods.grep(/zone/i) > > => ["zone"] > > > > Eloy > > > > On 8/4/07, Laurent Sansonetti <lsa...@ap...> wrote: > >> Try: > >> > >> def copyWithZone(zone) > >> copy = super_copyWithZone(zone) > >> # set your attributes to copy > >> # ex: > >> # copy.title = self.title > >> return copy > >> end > >> > >> Laurent > >> > >> On Aug 4, 2007, at 5:53 PM, Eloy Duran wrote: > >> > >>> Hello, > >>> > >>> I'm trying to write my own custom NSCell for a tableview. > >>> However, the table view tries to call #copyWithZone on my objects, > >>> which are subclasses of NSObject. So I was trying to create a > >>> working > >>> #copyWithZone, but no matter what I do it always crashes > >>> immediately. > >>> For instance I have the following, but it doesn't even write to the > >>> console: > >>> > >>> def copyWithZone(zone) > >>> puts 'COPY!' > >>> copy = Download.allocWithZone(zone).init > >>> self.instance_variables.each do |iv| > >>> copy.instance_variable_set iv, self.instance_variable_get(iv) > >>> end > >>> return copy > >>> end > >>> > >>> Backtrace: > >>> > >>> #0 0x90a594c0 in objc_msgSend () > >>> #1 0xbfffc21c in ?? () > >>> #2 0x0002b850 in ocid_to_rbobj () > >>> #3 0x0002df10 in ocdata_to_rbobj () > >>> #4 0x0003051a in ovmix_register_ruby_method () > >>> #5 0x00031a98 in rbobj_call_ruby () > >>> #6 0x00031075 in ovmix_register_ruby_method () > >>> #7 0x0002f8b9 in init_ovmix () > >>> #8 0x927fa468 in -[NSObject(NSForwardInvocation) forward::] () > >>> #9 0x90a5ccc1 in _objc_msgForward () > >>> #10 0x932aed02 in -[NSCell _setContents:] () > >>> #11 0x932aec95 in -[NSCell setObjectValue:] () > >>> #12 0x9353abaa in -[_NSPlaceholderTextFieldPlugin > >>> showValue:inObject:] () > >>> #13 0x93511593 in -[NSValueBinder showValue:inObject:] () > >>> #14 0x93510938 in -[NSValueBinder > >>> _adjustObject:mode:observedController:observedKeyPath:context:editableState:adjustState > >>> :] > >>> () > >>> #15 0x9353a287 in -[NSValueBinder > >>> updateTableColumnDataCell:forDisplayAtIndex:] () > >>> #16 0x9353a9ef in -[NSTextValueBinder > >>> updateTableColumnDataCell:forDisplayAtIndex:] () > >>> #17 0x9353a1d6 in -[_NSBindingAdaptor > >>> tableColumn:willDisplayCell:row:] () > >>> #18 0x93402a9d in -[NSTableView > >>> _sendDelegateWillDisplayCell:forColumn:row:] () > >>> #19 0x933ea065 in -[NSTableView _drawContentsAtRow:column:clipRect:] > >>> () > >>> #20 0x933e902b in -[NSTableView drawRow:clipRect:] () > >>> #21 0x933e67ce in -[NSTableView drawRowIndexes:clipRect:] () > >>> #22 0x933e56a4 in -[NSTableView drawRect:] () > >>> #23 0x933113b1 in -[NSView _drawRect:clip:] () > >>> #24 0x9331040b in -[NSView > >>> _recursiveDisplayAllDirtyWithLockFocus:visRect:] () > >>> #25 0x9330f473 in -[NSView > >>> _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView > >>> :] > >>> () > >>> #26 0x93310041 in -[NSView > >>> _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView > >>> :] > >>> () > >>> #27 0x93310041 in -[NSView > >>> _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView > >>> :] > >>> () > >>> #28 0x93310041 in -[NSView > >>> _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView > >>> :] > >>> () > >>> #29 0x93310041 in -[NSView > >>> _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView > >>> :] > >>> () > >>> #30 0x9330eb78 in -[NSThemeFrame > >>> _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView > >>> :] > >>> () > >>> #31 0x9330e362 in -[NSView > >>> _displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:] > >>> () > >>> #32 0x9330dc8e in -[NSView displayIfNeeded] () > >>> #33 0x9330da32 in -[NSWindow displayIfNeeded] () > >>> #34 0x9335dd6c in _handleWindowNeedsDisplay () > >>> #35 0x9082dd6e in __CFRunLoopDoObservers () > >>> #36 0x9082ce10 in CFRunLoopRunSpecific () > >>> #37 0x9082cace in CFRunLoopRunInMode () > >>> #38 0x92dec8d8 in RunCurrentEventLoopInMode () > >>> #39 0x92debfe2 in ReceiveNextEventCommon () > >>> #40 0x92debe39 in BlockUntilNextEventMatchingListInMode () > >>> #41 0x93292465 in _DPSNextEvent () > >>> #42 0x93292056 in -[NSApplication > >>> nextEventMatchingMask:untilDate:inMode:dequeue:] () > >>> #43 0x9328bddb in -[NSApplication run] () > >>> #44 0x9327fd2f in NSApplicationMain () > >>> #45 0x0003fc0d in ffi_call_SYSV () > >>> #46 0x0003fbae in ffi_call () > >>> #47 0x0003cfa0 in rb_ffi_dispatch () > >>> #48 0x00035ca0 in find_bs_boxed_by_encoding () > >>> #49 0x00221e09 in call_cfunc () > >>> #50 0x002214f2 in rb_call0 () > >>> #51 0x00222489 in rb_call () > >>> #52 0x0021c34a in rb_eval () > >>> #53 0x00217d9c in eval_node () > >>> #54 0x00218369 in ruby_exec_internal () > >>> #55 0x002183b3 in ruby_exec () > >>> #56 0x002183dd in ruby_run () > >>> #57 0x00033474 in RBApplicationMain () > >>> #58 0x00002886 in main () > >>> > >>> So does somebody know of a good way of implementing this with > >>> RubyCocoa? > >>> > >>> Cheers, > >>> Eloy > >>> > >>> PS: I'm on svn rev 1983 > >>> > >>> ------------------------------------------------------------------------- > >>> This SF.net email is sponsored by: Splunk Inc. > >>> Still grepping through log files to find problems? Stop. > >>> Now Search log events and configuration files using AJAX and a > >>> browser. > >>> Download your FREE copy of Splunk now >> http://get.splunk.com/ > >>> _______________________________________________ > >>> Rubycocoa-talk mailing list > >>> Rub...@li... > >>> https://lists.sourceforge.net/lists/listinfo/rubycocoa-talk > >> > >> > >> ------------------------------------------------------------------------- > >> This SF.net email is sponsored by: Splunk Inc. > >> Still grepping through log files to find problems? Stop. > >> Now Search log events and configuration files using AJAX and a > >> browser. > >> Download your FREE copy of Splunk now >> http://get.splunk.com/ > >> _______________________________________________ > >> Rubycocoa-talk mailing list > >> Rub...@li... > >> https://lists.sourceforge.net/lists/listinfo/rubycocoa-talk > >> > > > > ------------------------------------------------------------------------- > > This SF.net email is sponsored by: Splunk Inc. > > Still grepping through log files to find problems? Stop. > > Now Search log events and configuration files using AJAX and a > > browser. > > Download your FREE copy of Splunk now >> http://get.splunk.com/ > > _______________________________________________ > > Rubycocoa-talk mailing list > > Rub...@li... > > https://lists.sourceforge.net/lists/listinfo/rubycocoa-talk > > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Splunk Inc. > Still grepping through log files to find problems? Stop. > Now Search log events and configuration files using AJAX and a browser. > Download your FREE copy of Splunk now >> http://get.splunk.com/ > _______________________________________________ > Rubycocoa-talk mailing list > Rub...@li... > https://lists.sourceforge.net/lists/listinfo/rubycocoa-talk > |