Finding substrings in iOS

It one point I experimented with using titles on my answer buttons to keep track of which answer was selected. I switched to tags since they are integers and they are easier to use in this particular implementation. In any case, I though it interesting to show how to get a substring from a string. My titles are of the form, ‘Answer1’, ‘Answer2’, … ‘Answer16′. I really only need the last one or two digits. I pass an NSString into the delegate method from a button press.


- (void)checkBoxTapped:(UIButton *)buttonPressed {
    [[self delegate] quizAnswered:buttonPressed.currentTitle];
}

Then I grab either the last digit or the last two digits from the string.


NSString *answer = [selectedAnswer substringWithRange:NSMakeRange(6, 1)]; // wrongAnswer - wA
if (selectedAnswer.length == 8) wA = [selectedAnswer substringWithRange:NSMakeRange(6, 2)];

I was doing a string comparison to decide which question was answered,


if ([answer isEqualToString:@"1"] || 
    [answer isEqualToString:@"2"] || 
    [answer isEqualToString:@"3"] || 
    [answer isEqualToString:@"4"] ) {
    // do something
}

What I should have done is convert the string to an int and then do a simple comparison.


NSInteger answerAsInt = [answer intValue];
if ([answerAsInt < 5 ) {
    // do something
}

Null objects and NSArrays


- (void)displayWithParentView:(UIView *)parentView
                    withItems:(NSArray *)items
                 withOldItems:(NSArray *)oldItems  {
    
    NSString *pictR1C1Name = items[0];
    NSString *pictR1C2Name = items[1];
    NSString *pictR2C1Name = items[2];
    NSString *pictR2C2Name = items[3];
    
    UIButton *oldR1C1Button = (oldItems[0]  == (id)[NSNull null]) ? nil : oldItems[0];
    UIButton *oldR1C2Button = (oldItems[1]  == (id)[NSNull null]) ? nil : oldItems[1];
    UIButton *oldR2C1Button = (oldItems[2]  == (id)[NSNull null]) ? nil : oldItems[2];
    UIButton *oldR2C2Button = (oldItems[3]  == (id)[NSNull null]) ? nil : oldItems[3];

This is a snippet of the code I use to put pictures on the screen. The old pictures slide off the screen and the new ones slide on. When the screen is first initialized the oldItems array has not yet been initialized. So it is null. I can’t put a null object into a button though, so I test to see if there is an null object in the array and then set the button to nil. Otherwise, I set the button to the button that has been passed in from the array.

Likewise, I can’t put null objects into an array—recall that the way to define an array is


NSArray *newArray = [NSArray arrayWithObjects:object1, object2, nil];

The first nil object terminates the array. So to add nil objects to the array you need to first convert the nil to an object.

So you basically do the reverse of the code above to convert nil to an null object.


object1 = (object1  == nil) ? [NSNull null] : object1;
NSArray *newArray = [NSArray arrayWithObjects:object1, object2, nil];