2011-01-14 6 views
2

Ich muss beide SDK (3.0 und 4.0) pflegen. Aber in 3.0 SDK bekomme ich Fehler.Ich muss beide SDK (3.0 und 4.0) beibehalten. Aber in 3.0 sdk bekomme ich Fehler

CGFloat maxScale; 

if ([[UIScreen mainScreen] respondsToSelector: @selector (scale)] == YES) 
{ 
    maxScale = 1.0/[[UIScreen mainScreen] scale]; 
} 
else 
{ 
    maxScale = 1.0; 
} 


warning: 'UIScreen' may not respond to '-scale' 
error: invalid operands to binary/(have 'double' and 'id') 

Wie löse ich dieses Problem?

+0

Sieht so aus, als hätte Apple in ID 3.0 einen ID-Typ eingebaut, aber es ist nicht nützlich/brauchbar. Vielleicht ist es hier die einzige Möglichkeit, die Version zu testen (auch wenn dies allgemein als nicht Best Practices angesehen wird). –

+3

Müssen Sie wirklich Ihr Projekt mit SDK 3.0 ** bauen? – Vladimir

+0

Ich setze das neueste SDK = 4.1 und setze iOS Deployment Target = 3.0. Es funktioniert gut am Simulator. Aber wenn ich auf wirklichem iphone 3g installiere, bekomme ich diesen Fehler. – Voloda2

Antwort

3

Wenn Sie Ihren Code, anders zu sein, wenn Sie mit unterschiedlichen SDK-Versionen bauen, dann müssen Sie Präprozessor verwenden:

#if __IPHONE_4_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED 

    maxScale = 1.0/[[UIScreen mainScreen] scale]; 

#else 

    maxScale = 1.0; 
#endif 

Aber normalerweise brauchen Sie nicht, bauen Sie Ihr Projekt mit dem neuesten SDK Sie haben und legen Sie den entsprechenden Wert für die Eigenschaft "iOS-Bereitstellungsziel" Ihres Ziels fest. Dann wird Ihre Anwendung auf SDK-Versionen ausgeführt, die Sie angegeben haben, und Code, den Sie haben, wird Laufzeit überprüfen, ob -scale Methode vorhanden ist.