[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