Re: [Pyobjc-dev] Catergory Question ...
Brought to you by:
ronaldoussoren
From: Mic P. <mic...@gm...> - 2009-05-10 17:06:08
|
Ronald, So is there no way at all the be able to call a Python pyobj-c class from Obj-C as from your earlier response you did imply this ?? '...the same is true for methods you add in a subclass, those can be called from ObjC as well...' I'm mainly a Obj-C programmer, and have only recently turned to PyObj-c as a way to utilise many libraries that simply aren't available to Obj-C, such as for processing Textile and Yaml ? I have got it working so far using another method I found on the internet which involves creating a wrapper class for the Python part and using NSClassFromString to instantiate the class, but I was hoping to drop these two extra files in favour of just using a header file and the original Python file like with the category stuff. Is this then not possible ? Thank -Mic 2009/5/10 Ronald Oussoren <ron...@ma...>: > Mic, > > You cannot refer to the class directly in Objective-C, that's because PyObjC > will create the class at runtime and your ObjC code tries to link to it at > compile-time. > > I tend to write all my code in Python, using ObjC as a way to optimize code > where needed and to access API's that are not available in Python. This > means I tend to be able to get away with creating instances in Python code, > while still calling methods on them in ObjC. > > Ronald > > On 10 May, 2009, at 18:26, Mic Pringle wrote: > >> Hi Ronald, >> >> As you have probably seen, I now have categories working fine, thanks >> to your help. >> >> You mentioned in one of your earlier replies that I can also do the >> same for subclasses, not just categories. So following this I have >> created a header file in Objective-C with the following contents ... >> >> #import <Cocoa/Cocoa.h> >> >> @interface BKTextile : NSObject >> >> - (NSString *)decodeTextile:(NSString *)aString; >> >> @end >> >> And then created the following Python implementation ... >> >> from Foundation import * >> import textile >> >> class BKTextile(NSObject): >> >> def decodeTextile_(self, aString): >> return u"it worked!" >> >> Which is pretty much what I've done to get the category to work, >> except when I try to compile I get the following error ... >> >> .objc_class_name_BKTextile referenced from: >> literal-pointer@_OBJC@__cls_refs@BKTextile in PythonServerTest.o >> symbol(s) not found >> >> Any ideas ?? >> >> Thanks, >> >> Mic >> >> >> 2009/5/8 Ronald Oussoren <ron...@ma...>: >>> >>> On Friday, May 08, 2009, at 10:59AM, "Mic Pringle" <mic...@gm...> >>> wrote: >>>> >>>> Hi, >>>> >>>> Just a quick question regarding categories. >>>> >>>> I have a hybrid Obj-c/PyObj-c application and I'd like to know if I >>>> add a category in a PyObj-c module, will it be availble to use in the >>>> Obj-c side of the project ?? >>>> >>>> If so, does it just work or are there any special instructions I need >>>> to follow to get it working ? >>> >>> Methods you add using an Python category are available in ObjC as well >>> (the same is true for methods you add in a subclass, those can be called >>> from ObjC as well). >>> >>> Two possible sources for confusion/problems: >>> >>> * Unless the methods you add are already known to the compiler you'll >>> have to write a header file that the ObjC compiler >>> can use. You'll get compiler warnings otherwise. >>> >>> * Methods that you add in python by default have arguments and a return >>> value of type 'id'. This can be overridden by: >>> >>> - information extracted from the superclass (if you override a method >>> PyObjC knows the new method should have the >>> same signature as the one in a superclass). >>> - the method is defined in an informal_protocol that's known to PyObjC, >>> the method signature is then extracted from >>> that protocol >>> - manual annotations (objc.accessor, objc.selector, ....) >>> >>> Ronald >>>> >>>> Thanks >>>> >>>> -Mic >>>> >>>> >>>> ------------------------------------------------------------------------------ >>>> The NEW KODAK i700 Series Scanners deliver under ANY circumstances! Your >>>> production scanning environment may not be a perfect world - but thanks >>>> to >>>> Kodak, there's a perfect scanner to get the job done! With the NEW KODAK >>>> i700 >>>> Series Scanner you'll get full speed at 300 dpi even with all image >>>> processing features enabled. http://p.sf.net/sfu/kodak-com >>>> _______________________________________________ >>>> Pyobjc-dev mailing list >>>> Pyo...@li... >>>> https://lists.sourceforge.net/lists/listinfo/pyobjc-dev >>>> >>>> >>> > > |