0

Macruby で NSAttributedString の次のメソッドを実装しようとしています:

  • (id)attribute:(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.

OK、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>

これを正しく実装する方法はありますか?

4

2 に答える 2

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]

于 2013-01-22T21:53:26.347 に答える
0

これは別の有効な解決策です

 NSRange range;
 font=txtStor.attribute...effectiveRange:&range);

ここで範囲は参照によって渡されます。つまり、範囲の値のアドレスが渡されます。これにより、メソッド内で値を変更でき、変更された値は呼び出し元に残ります。

于 2014-10-21T13:36:48.753 に答える