You have not initialized thiscity.
Add:
City *thiscity = [[City alloc] init];
In Objective C, uninitialized variables are initialized to zero or Null.
So your pointer starts out as null.
You don't get an error when you do:
thiscity.cityName = @"London";
thiscity.description = @"Capital of Britain";
Because for properties the . operator is just syntactic sugar for:
[thiscity setCityName: @"London"];
[thiscity setDescription: @"Capital of Britain"];
And in Objective C, you can send any message you want to a null object -- it just quietly returns null.
Similarly when you are accessing the properties, you are sending getCityName to Null and getting back null.
So you end up with a blank alert.