MacRuby指针和Obj-C函数通过引用返回一个值

时间:2013-01-21 01:42:45

标签: objective-c pointers reference macruby nsrange

我正在尝试在Macruby中实现以下NSAttributedString方法:

  • (id)属性:(NSString *)attributeName atIndex:(NSUInteger)index effectiveRange:(NSRangePointer)aRange

根据定义,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>

任何想法如何正确实现?

2 个答案:

答案 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);

这里通过引用传递范围,换句话说,传递范围值的地址,这允许在方法内部更改值,并且已更改的值保留在调用者中。