rpetrich has given you the right answer, but have you considered using a loop instead?
while (condition is not met)
{
// logic that affects condition.
}
Also if 'condition' is dependent on outside forces (user input, downloading, etc) then neither of these are correct and you could cause a deadlock - this is where two cases cannot complete because they are both waiting on the other.
If this is the case you should use a timer that checks for the condition every XXX seconds or so. The easiest way is to use the 'performSelector' function which can be used to trigger a call after a specified amount of time.
E.g.
-(void)someFunc
{
if(!condition)
{
[self performSelector:@selector(someFunc) withObject:nil afterDelay:1.0];
}
}