[MacRuby-devel] Setting properties on a dereferenced NSRangePointer has no effect
Laurent Sansonetti
lsansonetti at apple.com
Wed Jan 26 14:22:39 PST 2011
Hi Caio,
Sorry for the late response. This is a limitation of our implementation of pointers. Sadly, I don't recall the problem anymore (as I wrote that stuff 2 years ago), but I think it's related to the way we cache the Pointer internal data.
For 1.0, we should either document this or try to make proposedSelRangePtr[0].location=42 work, as I suspect people will hit the same problem. Could you file a ticket? We will continue the investigation there.
Thanks!
Laurent
On Jan 21, 2011, at 1:37 PM, Caio Chassot wrote:
> Hi all,
>
> NSFormatter defines a method with the following selector:
>
> isPartialStringValid:proposedSelectedRange:originalString:originalSelectedRange:errorDescription:
>
> This is its signature:
>
> - (BOOL)isPartialStringValid:(NSString **)partialStringPtr
> proposedSelectedRange:(NSRangePointer)proposedSelRangePtr
> originalString:(NSString *)origString
> originalSelectedRange:(NSRange)origSelRange
> errorDescription:(NSString **)error
>
>
> The relevant bit here is the proposedSelRangePtr argument, which is a NSRangePointer.
>
> When subclassing NSFormatter in ruby, I define the method as:
>
> def isPartialStringValid(partialStringPtr,
> proposedSelectedRange:proposedSelRangePtr,
> originalString:origString,
> originalSelectedRange:origSelRange,
> errorDescription:error)
>
>
> When implementing the Cocoa Programming exercises in MacRuby, I ran across the following situation:
>
> At some point in that method definition, in the original code, Aaron sets the range properties directly:
>
> proposedSelRangePtr->location = [*partialStringPtr length];
> proposedSelRangePtr->length = [match length] - proposedSelRangePtr->location;
>
>
> Initially, I did similar in MacRuby
>
> proposedSelRangePtr[0].location = partialStringPtr[0].length
> proposedSelRangePtr[0].length = match.length - proposedSelRangePtr[0].location
>
>
> This has no effect. It does not raise, but the values go unchanged. I can NSLog the range values before and after and they're the same.
>
> My final solution was to assign a new range to that location:
>
> proposedSelRangePtr[0] = NSRange.new(partialStringPtr[0].length, match.length - partialStringPtr[0].length)
>
>
> But I wonder why setting the range properties had no effect. MacRuby bug?
>
> _______________________________________________
> MacRuby-devel mailing list
> MacRuby-devel at lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-devel/attachments/20110126/3998ed44/attachment.html>
More information about the MacRuby-devel
mailing list