Я пишу некоторый код AppKit в PyObjC на Lion, и я хочу использовать специальный стиль доступа KVC, например, obj._.field = value
вместо obj.setField_(value)
.
У меня есть успешная установка NSString- и NSDictionaryсвойства с KVC, но у меня возникают проблемы с обернутыми структурами Objective-C, в частности NSSize и NSRect.
Когда я пытаюсь установить свойство KVC типа NSSize или NSRect, слой Objective-C выбрасываетNSInvalidArgumentException.Какао пытается вызвать sizeValue
или rectValue
для объекта Python.
Вот журнал в интерактивной подсказке, который показывает проблему:
% python
Python 2.7.1 (r271:86832, Jul 31 2011, 19:30:53)
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from AppKit import *
>>> NSApplication.sharedApplication()
<NSApplication: 0x7fcf6ae071f0>
>>> w = NSWindow.alloc().init()
>>> w._.minSize = NSSize(100, 200)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC/objc/_convenience.py", line 141, in __setattr__
return self.__object.setValue_forKey_(value, key)
ValueError: NSInvalidArgumentException - Class OC_PythonObject: no such selector: sizeValue
>>> r = NSMakeRect(100, 200, 300, 400)
>>> w._.frame=r
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC/objc/_convenience.py", line 141, in __setattr__
return self.__object.setValue_forKey_(value, key)
ValueError: NSInvalidArgumentException - Class OC_PythonObject: no such selector: rectValue
PyObjC, кажется, обертываниеструктуры в прокси OC_PythonObject, который не реализует ожидаемый конвертер KVC.Код KVC предполагает, что значение похоже на NSValue, и реализует методы доступа к структуре.
Есть ли способ установить свойства KVC со структурными значениями в PyObjC?