Solving first- and second-degree degree polynomials
As you wrote,


//TODO: check if a = 0



First degree polynomials are just a degenerate case of second degree polynomials, where the leading coefficient is 0.  Perhaps you should design your interfaces to reflect that.

I'm not sure that all those calculate… methods are appropriate.  Part of the point of object-oriented programming is to give the illusion of "smart data".  The object knows when it needs to recalculate; the caller just asks for poly.x and the answer is just there.

In first.m,


- (double) calculate {
    self.x = (self.b - 2 * self.b)/self.a;
    return self.x;

}



could just be

- (double) calculate {
    return self.x = -self.b / self.a;
}


In Objective C, it is not necessary to check if the receiver of a message is nil.  Therefore,


if (self) {
    self.a = aValue;
    self.b = bValue;

}



does not need to be in an if block.