From: Stephyn B. <ste...@co...> - 2008-08-18 22:33:47
|
Dear all, I'm using RubyCocoa 0.13.2 on OS X 10.5.4 I have a problem that is driving me batty. I was originally trying to use XmlBuilder to write out some XML. However, at seemingly random places, my application would crash while building the XML and jump into the debugger, always at objc_msgSend. Well, I thought perhaps there might be some strange problem with XmlBuilder so I decided to try using REXML instead. Well now I get the problem immediately. The following code works perfectly from the command line using /usr/bin/ruby which points to /System/Library/ Frameworks/Ruby.framework/Versions/Current/usr/bin/ruby require 'osx/cocoa' require 'rexml/document' doc = REXML::Document.new node = REXML::Element.new( "node") doc.add_element node puts "#{doc.to_s}" In fact, there's no particular reason to include 'osx/cocoa' as it stands because I deleted everything down to the simplest terms. Originally, I had objects that knew how to write themselves to XML. However, if I run the following code as part of an XCode project for a Cocoa application: require 'osx/cocoa' require 'rexml/document' class AppController < OSX::NSObject include OSX # big cut of other methods def exportModel return if @modelAlias.selectedObjects.length < 1 model = @modelAlias.selectedObjects[ 0] # panel = NSSavePanel.savePanel # return if panel.runModalForDirectory_file( nil, "model.xml") != NSFileHandlingPanelOKButton # filename = NSString.stringWithString panel.filename doc = REXML::Document.new node = REXML::Element.new( "node") doc.add_element node NSLog( "#{doc.to_s}") end ib_action :exportModel end The application barely runs. It starts up but when I attempt to load a model into the application, the application crashes and goes immediately into the debugger (dbg) without any other information about what might have gone wrong. I assume it crashes on openModels (and not exportModel) because it is the first time that AppController is interpreted. Here are the first 30 lines from the backtrace: #0 0x946ef6e8 in objc_msgSend () #1 0x0002fab4 in rbobj_to_nsobj () #2 0x0002d327 in objcptr_s_new_with_cptr () #3 0x000dc1d8 in rb_eval_string_wrap () #4 0x000dcdec in rb_eval_string_wrap () #5 0x000da06d in rb_eval_string_wrap () #6 0x000db17c in rb_eval_string_wrap () #7 0x000db1c5 in rb_eval_string_wrap () #8 0x000dc9de in rb_eval_string_wrap () #9 0x000e641e in rb_apply () #10 0x000dc323 in rb_eval_string_wrap () #11 0x000dcdec in rb_eval_string_wrap () #12 0x000dd871 in rb_respond_to () #13 0x000dd95a in rb_funcall () #14 0x00104a55 in rb_inspect () #15 0x00035bca in rbobj_call_ruby () #16 0x00034db6 in install_ovmix_hooks () #17 0x000331ef in ovmix_register_ruby_method () #18 0x9030e9aa in ___forwarding___ () #19 0x9030ea12 in __forwarding_prep_0___ () #20 0x00033319 in ovmix_register_ruby_method () #21 0x9584a69b in _NSGetUsingKeyValueGetter () #22 0x9584a1aa in -[NSObject(NSKeyValueCoding) valueForKey:] () #23 0x95878192 in -[NSArray(NSKeyValueCoding) valueForKey:] () #24 0x95877d2a in -[NSObject(NSKeyValueCoding) valueForKeyPath:] () #25 0x958c3548 in -[NSArray(NSKeyValueCoding) valueForKeyPath:] () #26 0x95877c90 in -[NSObject(NSKeyValueCoding) valueForKeyPath:] () #27 0x95118cd4 in -[NSBinder _valueForKeyPath:ofObject:mode:raisesForNotApplicableKeys:] () #28 0x951188dc in -[NSBinder valueForBinding:resolveMarkersToPlaceholders:] () #29 0x951f2b29 in -[NSSelectionBinder _adjustObject:mode:observedController:observedKeyPath:context:editableState:adjustState :] () #30 0x9514d950 in -[NSValueBinder _observeValueForKeyPath:ofObject:context:] () Note that it is not enough to comment out the REXML lines, to make everything run fine. I have to comment out the require 'rexml/ document' line as well...then everything will run fine....but REXML is in the Ruby standard library. I can cd to /System/Library/Frameworks/ Ruby.framework/Versions/Current/usr/lib/ruby/1.8/rexml/ and see that document.rb is there. Any ideas? Cheers, Steve |