Does my challenge 1 solution follow good practice?

You can do the same thing with the substringWithRange: method of NSString:

- (NSString *)substringWithRange:(NSRange)aRange;