2015-04-10 17 views
7

Nie wymyślam koła. W systemów iOS 8, aby otworzyć Ustawienia od wewnątrz aplikacji używam tego kodu:Problem z ostrzeżeniami w Ustawieniach otwartych w Xcode 6.3: Porównanie adresu "UIApplicationOpenSettingsURLString" nie jest równe zeru jest zawsze prawdziwe

BOOL canOpenSettings = (&UIApplicationOpenSettingsURLString != NULL); 

if (canOpenSettings) 
{ 
    NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; 
    [[UIApplication sharedApplication] openURL:url]; 
} 

Kod jest w wielu odpowiedzi i pytań w stackoverflow.

Problem wyszedł z Xcode 6.3, mam ostrzeżenie mówiąc:

Comparison of address of 'UIApplicationOpenSettingsURLString' not equal to a null pointer is always true

Co ciekawe jest to, że Apple używa go w ich przykładowy kod:
https://developer.apple.com/library/ios/samplecode/AppPrefs/Listings/RootViewController_m.html

Jakiś pomysł, jak uniknąć ostrzeżenia i wciąż sprawdzać, czy mogę otworzyć Ustawienia?

+0

Wobec podobnego problemu po ostatniej aktualizacji, jeszcze nie znalazłem żadnego rozwiązania. Przykładowy kod, o którym wspomniałeś, został ostatnio zaktualizowany w dniu 2014-09-17. Przeszedłem tutaj odpowiedzi, http://stackoverflow.com/q/459743/2713079. Ale nic tak naprawdę nie pomogło mi. – itsji10dra

+0

Mam opublikował moje pytanie tutaj, http://stackoverflow.com/q/29560015/2713079, jeśli chcesz, aby wyglądać :) – itsji10dra

Odpowiedz

13

rozwiązany:

Problem jest związany z docelowym wdrażania w aplikacji.

screenshot

jeśli cel jest 8,0 lub powyżej, porównanie będzie zawsze prawdziwe, ponieważ są zawsze ponad 8,0. Więc nie trzeba, jeśli weryfikacja:

NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; 
[[UIApplication sharedApplication] openURL:url]; 

Inną opcją może być:

NSURL *settings = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; 
if ([[UIApplication sharedApplication] canOpenURL:settings]) 
{ 
    [[UIApplication sharedApplication] openURL:settings]; 
} 
+1

Och tak, twój problem może być rozwiązany w ten sposób, ale mój jest bardziej skomplikowany. – itsji10dra

+0

To, co sprawia, że ​​nowe ostrzeżenie jest naprawdę denerwujące, to fakt, że jeśli udostępniasz kod pomiędzy systemem iOS i OS X, ponieważ liczba symboli, które musisz sprawdzić, rośnie, prawdopodobieństwo, że będziesz zmuszony tolerować to ostrzeżenie na jednej platformie, aby uniknąć awarii na drugiej platformie podchodzi 1 .... Prawdopodobnie jest sposób na zabicie go przy pomocy pragmy lub ustawienia kompilatora, ale nie wiem, jakie ustawienie. – dgatwood

+0

Powiedziano mi, że można wyłączyć ostrzeżenie globalnie, dodając -Wno-tautologiczne-wskaźnik-porównać z flagami kompilatora, lub jednorazowo, owijając "i cokolwiek" w nawiasach. – dgatwood

1

wierzę, to dlatego & UIApplicationOpenSettingsURLString nigdy nie występuje w tej wersji, dzięki czemu można po prostu bezpośrednio używać następujących do ustawienia uruchamiania:

NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; 
[[UIApplication sharedApplication] openURL:url]; 
+2

o Boże, nie zdawałem sobie sprawy, że to już rozwiązano .-. – Schemetrical

Powiązane problemy