我正在尝试在Macruby中实现以下NSAttributedString方法:
根据定义,Returns the value for an attribute with a given name of the character at a given index, and by reference the range over which the attribute applies.
好的,所以我需要一个指向NSRange的指针,我设置如下:
range=Pointer.new("{_NSRange=QQ}")[0]
似乎没事range.class
=> NSRange
。
但是,当我执行方法时:
font=txtStor.attribute(NSFontAttributeName,atIndex:index,effectiveRange:range)
我的range
始终是#<NSRange location=0 length=0>
。另外,p range
给了我#<NSRange location=0 length=0>
。
任何想法如何正确实现?
答案 0 :(得分:0)
我在MacRuby-devel邮件列表中获得了Watson的解决方案。我本应该写这样的代码:
range=Pointer.new(NSRange.type)
#though range=Pointer.new("{_NSRange=QQ}") would also work
然后,就像我之前一样
font=txtStor.attribute(NSFontAttributeName,atIndex:index,effectiveRange:range)
如果需要,我可以通过range[0]
取消引用范围。
答案 1 :(得分:0)
这是另一个有效的解决方案
NSRange range;
font=txtStor.attribute...effectiveRange:&range);
这里通过引用传递范围,换句话说,传递范围值的地址,这允许在方法内部更改值,并且已更改的值保留在调用者中。