[Openmcl-devel] initializing objects that are created elsewhere

alex crain alexcrain at mail.widgetworks.com
Sun Jan 9 09:46:24 PST 2005


My question about loading from nib files has turned into a more general 
OBJC problem.

Any time an object is created on the OBJC side, it is not properly 
initialized on the lisp
side, which means that if there are lisp slots, they don't get set up 
unless I do it explicitly.

My latest example is with NSDocuments, which are created through the 
File menu.

I have something like this:

(defclass ide-editor-document (ns:ns-document)
   (((nib-name)
    (window-controller-class :initform 'hemlock-window-controller 
:accessor document-window-controller)
    (textstorage :initform nil :accessor document-text-storage)
    )
   (:metaclass ns:+ns-object))

(defmethod initialize-instance :after ((doc ide-editor-document) &rest 
initargs)
   (declare (ignorable initargs))
   (setf (slot-value doc 'nib-name) "ide-editor")
)

Which is fine if use MAKE-INSTANCE, but if I have IdeEditorDocument as 
a value in the
Info.plist file, then clicking File->New causes OBJC to create the new 
object and all I get
is a pointer to an uninitialized lisp object: no slots and 
INITIALIZE-INSTANCE is never run.

In this case I just added (INITIALIZE-INSTANCE self) to the 
:makeWindowControllers method,
but the programmer shouldn't have to figure out if an object has been 
initialized or not.

Somewhere, there is code that maps the external MACPTR to an object 
structure. That code
knows what the object is and whether it already exists, so it should be 
able to handle this job.
Can anyone give me a hint as to where to look?

:alex




More information about the Openmcl-devel mailing list