Q:

Compile Error with: switch, "expected expression before"

Cut to the chase I have recreated my problem as it is fairly self explanatory. 
this complies without error:
switch (n) {
    case 1:
        NSLog(@"");
        NSString *aStr;
        break;
    default:
        break;
    }

this compiles with error and it's only missing the NSLog():
switch (n) {
    case 1:
        NSString *aStr;
        break;
    default:
        break;
    }

it throws an error at compile "Expected expression before 'NSString'"
Am I missing something here?

A:

In normal C you'd have to enclose this in brackets in both cases.  I suspect this may fix your problem:
case 1:
{
    NSLog(@"");
    NSString *aStr;
    break;
}

See this SO question for more info.
Another way to get around this problem is to put a statement between the case label and the first declaration as you've done in your working example above.  See the comments and Quinn Taylor's answer for more info.

A:

You can't declare a variable as the first statement in a case without brackets, and in many other contexts in C-based languages. See Declaring variables inside a switch statement for details.

