The enterDigit: method we added to the Controller class is invoked whenever a digit button is clicked. Let’s look at it closely to see how it works.
- enterDigit:sender { if (enterFlag) { Y = X; X = 0.0; enterFlag = NO; } X = (X*10.0) + [ [sender selectedCell] tag]; [self displayX]; return self; }
The first part of the function is self-explanatory: if the
enterFlag
instance variable is set, the value of
the X register is copied into the Y register and both the X register
and enterFlag
are cleared. Note that the
scope
of
instance variables such as enterFlag
is the entire
class definition. All methods within a class have access to all
instance variables defined in that class.
The next line contains the magic: the value in the X register is multiplied by 10 and added to the returned value, [[sender selectedCell] tag]. This performs a base-10 left-shift operation on X and then adds the last digit pressed. Let’s look at this nested method expression in pieces.
[sender
selectedCell]
sends the selectedCell message to the variable
sender
. When the enterDigit: method is invoked (called),
sender
is set to the id of the object that sent
the message — in this case, the NSMatrix object. Clicking a
button in an NSMatrix selects that button. Thus, the expression
[sender selectedCell] returns the id
of the NSButtonCell object for the button that was clicked. [[sender selectedCell] tag] then sends the
tag message to the NSButtonCell
object; this method asks the button for the tag of the cell. Thus,
the nested message expression [[sender
selectedCell] tag] returns the tag of the pressed button.
(Recall that the tag on the digit button is equal to the digit label
on the button.)
18.119.130.24