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@lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel

_______________________________________________
MacRuby-devel mailing list
MacRuby-devel@lists.macosforge.org
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel

Reply via email to