Hi Banlu,

Le 26 juin 2012 à 00:32, Al Chemyth a écrit :

> Hello,
> I have several frameworks that I want to register their UTI using +initialize 
> for each class but I have a problem that the parent class type may not 
> already be +initialize'd and so I need to manually call [aClass class] to 
> activate their +initialize's.

When a class receives +initialize, the runtime ensures its superclasses have 
received +initialize. See +[NSObject initialize] doc on Apple website.
You might have stumbled on a runtime bug here.

> This is a little inconvenience as it must know exactly what class was 
> responsible for a needed supertype hence it will break the encapsulation of 
> the framework that is responsible for the supertype registration. In the case 
> that the supertype registrations can be guaranteed to be initialized at some 
> states in the application, would it be convenience to allow some temporary 
> supertype registration that would just raise exceptions by default but to be 
> replaced by real registrations later? (I could also just add some 
> per-frameworks global functions to encapsulate the initializations though)

As an alternative, if you are writing an application, you can declare your UTIs 
in a UTIDefinitions.plist and UTIClassBindings.plist that belong to the 
application resources. See the ETUTI class documentation for more explanations. 
For the plist format to be used in UTIDefinitions.plist and 
UTIClassBindings.plist, check EtoileFoundation, its resources include the 
built-in UTIs in such plist files.

To support the same mechanism for frameworks, I could add a method +[ETUTI 
registerTypesForBundle:]… You would just have to call this method with your 
framework bundle once it it's loaded.
It might even be possible to enumerate the currently loaded frameworks in +[UTI 
initialize] and handle that transparently.

Cheers,
Quentin.



_______________________________________________
Etoile-discuss mailing list
[email protected]
https://mail.gna.org/listinfo/etoile-discuss

Répondre à