Я пытаюсь сделать простой пример, используя Распределенные объекты с PyObjC. На стороне сервера у меня есть (в Xcode):
class VendedObject(NSObject):
@objc.signature('@24@0:')
def speak(self):
return 'woof'
class TalkAppDelegate(NSObject):
def applicationDidFinishLaunching_(self, sender):
NSLog("Application did finish launching.")
conn = NSConnection.defaultConnection()
NSLog("Creating connection")
obj = VendedObject.alloc().init()
print obj.description()
conn.setRootObject_(obj)
result = conn.registerName_("my_server")
if not result:
NSLog("Failed to register Name")
#conn.setDelegate_(self)
NSLog(conn.description())
Когда я запускаю его, я получаю:
2011-01-27 10:27:55.695 Talk[34432:a0f] Application did finish launching.
2011-01-27 10:27:55.698 Talk[34432:a0f] Creating connection
<VendedObject: 0x3e45970>
2011-01-27 10:27:55.701 Talk[34432:a0f] (** NSConnection 0x28f2030 receivePort <NSMachPort: 0x28f2160> sendPort <NSMachPort: 0x28f2160> refCount 2 **)
На стороне клиента у меня есть:
class ListenAppDelegate(NSObject):
def applicationDidFinishLaunching_(self, sender):
NSLog("Application did finish launching.")
proxy_obj = NSConnection.rootProxyForConnectionWithRegisteredName_host_(
"my_server", None)
if not proxy_obj:
print 'Did not get an object from the server.'
else:
print proxy_obj.description()
print proxy_obj.speak()
Я получаю:
2011-01-27 10:28:35.821 Listen[34460:a0f] Application did finish launching.
<VendedObject: 0x3e45970>
2011-01-27 10:28:35.829 Listen[34460:a0f] -[OC_PythonString initWithBytes:length:encoding:]: unrecognized selector sent to instance 0x3635130
2011-01-27 10:28:35.832 Listen[34460:a0f] -[OC_PythonString initWithBytes:length:encoding:]: unrecognized selector sent to instance 0x3635130
Я что-то упускаю, но не знаю что?
РЕДАКТИРОВАТЬ: изменено, чтобы использовать, как мне кажется, правильную подпись и показать новую проблему, которая возникает
Спасибо.