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

Reply via email to