hi XT!
I have just started in the book myself (now in chapter 9) so I am not an experienced programmer, but I will try to help.
Actually your code builds fine, when I put it in XCode. It does not run though.
This is from your code, in the 'main' part:
Fraction * myFraction;
//create an instance of a Fraction
myFraction = [Fraction alloc];
myFraction = [Fraction init];
In line 4 you call the Fraction class to allocate memory for a new instance, and return that instance to myFraction. Then in line 5 you call the Fraction class again, this time to initialize. But it is not the class that should initialize itself, it is the newly allocated instance that should initialize itself.
This works better:
Fraction * myFraction;
//create an instance of a Fraction
myFraction = [Fraction alloc];
myFraction = [myFraction init];
There in line 5 the newly allocated instance myFraction receives the message to initialize. The result of that, the initialized instance, is then the new value of myFraction.
The following has the exact same result, but might help better in understanding what is going on:
Fraction * myFraction;
Fraction * myIntermediateFraction;
//create an instance of a Fraction
myIntermediateFraction = [Fraction alloc];
myFraction = [myIntermediateFraction init];