- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 Lion 上的 PyObjC 中编写一些 AppKit 代码,并且我想使用特殊的 KVC 访问器样式,例如obj._.field = value
而不是 obj.setField_(value)
。
我成功使用 KVC 设置了 NSString 和 NSDictionary 值属性,但我在包装 Objective-C 结构时遇到了问题,特别是 NSSize 和 NSRect。
当我尝试设置 NSSize 或 NSRect 类型的 KVC 属性时,Objective-C 层会抛出 NSInvalidArgumentException。 Cocoa 正在尝试调用 Python 对象上的 sizeValue
或 rectValue
。
以下是显示问题的交互式提示的日志:
% 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 并实现结构访问器方法。
有没有办法在 PyObjC 中设置结构值 KVC 属性?
最佳答案
这很简单。即使在普通的 ObjC 中,结构也需要包装在 NSValue
中。在通过 KVC 之前。您可以在 Python 中执行相同的操作:
>>> w._.minSize = NSValue.valueWithSize_(NSSize(100,200))
>>> w.minSize()
<NSSize width=100.0 height=200.0>
>>> w._.frame = NSValue.valueWithRect_(NSMakeRect(100, 200, 300, 400))
>>> w.frame()
<NSRect origin=<NSPoint x=100.0 y=200.0> size=<NSSize width=300.0 height=400.0>>
参见"Wrapping and Unwrapping Structs"有关详细信息,请参阅 KVC 编程指南。另外,在执行此操作时不要忘记,并非所有类的所有属性都符合 KVC。
关于cocoa - 如何将 NSSize 和 NSRect 传递给 PyObjC KVC 便捷访问器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8442157/
CGPoint、CGSize、CGRect的单位是什么; NSSize、NSPoint 和 NSRect? 最佳答案 CGPoint等的单位是点。一个点在非视网膜屏幕上代表一个像素,在视网膜屏幕上代表
本文以实例详细描述了Objective-C中常用的结构体NSRange,NSPoint,NSSize(CGSize),NSRect的定义及用法,具体如下所示: 1、NSRange: NSRang
我正在 Lion 上的 PyObjC 中编写一些 AppKit 代码,并且我想使用特殊的 KVC 访问器样式,例如obj._.field = value 而不是 obj.setField_(value
我看到了一些奇怪的现象,并试图确定 - 环境或我...... FWIW - 我正在阅读 Tim Isted 书中的第 12 章。我已经双重和三次检查 - 仍然得到奇怪的结果 - 最佳答案 iOS 使用
我是一名优秀的程序员,十分优秀!