The enterDigit: Action Method

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 ...

Get Building Cocoa Applications: A Step by Step Guide now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.