Po utworzeniu domyślnego projektu systemu iphone OS w kodzie x, masz main.m w "Inne źródła" na panelu bocznym w XCode. W jaki sposób int main() używa argc i argv i dlaczego go potrzebuje?W jaki sposób iOS używa argc i argv?
Dzięki :)
Po utworzeniu domyślnego projektu systemu iphone OS w kodzie x, masz main.m w "Inne źródła" na panelu bocznym w XCode. W jaki sposób int main() używa argc i argv i dlaczego go potrzebuje?W jaki sposób iOS używa argc i argv?
Dzięki :)
myślę, że są one dostępne tylko dlatego kompilatory z nich korzystać, ale w przypadku iOS są po prostu bezużyteczne, ponieważ nie jest bezpośredni sposób dynamicznie dodać argumenty powoływane aplikację na iPhone. Lub przynajmniej przypuszczam ..
Otwórz informacje o swoim pliku wykonywalnym. W zakładce argumentów znajduje się arguments to be passed on launch:
. Jeśli coś tam dodasz, zostanie przesłane do Twojej aplikacji.
Apple stworzył kilka argumentów, które tam umieściłeś i zmieniają zachowanie aplikacji. -com.apple.CoreData.SQLDebug 1
na przykład wydrukuje niektóre komunikaty debugowania sql, jeśli używasz coredata. Jestem pewien, że istnieje więcej argumentów debugowania
int count;
for (count = 0; count < argc; count++)
{
NSLog(@"argv[%d] = %s\n", count, argv[count]);
}
EDIT: argumenty te są stosowane tylko wtedy, gdy uruchomisz aplikację z Xcode.
Przepraszam, jestem nowy w tym. Który plik jest plikiem wykonywalnym w domyślnym szablonie iOS? – Tim
Na pasku bocznym xcode znajduje się kilka grup, jedna nazywa się twoim projektem, a tam są cele, pliki wykonywalne, wyniki wyszukiwania i tak dalej. Otwórz grupę Executables, powinien być jeden element, twój plik wykonywalny. Kliknij dwukrotnie, aby uzyskać dostęp do informacji. –
Ahh Rozumiem. Dziękuję ~ – Tim
To jest po prostu przejawem Objective-C jest podzbiorem C
W systemie Mac OS X, można to wykorzystać, aby przekazywać argumenty do aplikacji poprzez wywołanie go z terminalu, takie jak (prawdopodobnie nie działa):
/Applications/iTunes.app/Contents/MacOS/iTunes my args to application
Na iOS nie ma możliwości uruchamiania aplikacji z poziomu wiersza poleceń.
Tak właśnie myślałem. Więc tak naprawdę nic nie robią w projekcie, są tam tylko domyślnie? – Tim
Nie powinno być zwykle execve() poniżej:
Parametry argc i ARGV zawierać żadnych argumentów uruchom upływu czasu do wniosku z system. Te argumenty są analizowane przez infrastrukturę UIKit i mogą w inny sposób zostać zignorowane.
Zasadniczo UIApplicationMain()
tworzy singleton UIApplication
przedmiot, który również przekazał swoją aplikację Delegowanie obiekt. Nie określają protokołu inicjalizacji w dokumentach, ale brzmi to tak, jakby argc/argv były przekazywane do UIApplication podczas jakiejś inicjalizacji, a następnie UIApplication analizuje je i zamienia je na informacje (być może opcje uruchamiania), do których można uzyskać dostęp poprzez UIApplication.
W każdym razie argc/argv są zarezerwowane dla systemu operacyjnego w aplikacjach na iOS. Wygląda na to, że system wykorzystuje je do przekazywania rzeczy do aplikacji UIApplication.
EDIT
W ramach eksperymentu, I dodaje się następujące w moim funkcji main():
for (int i; i < argc; i++)
NSLog(@"%s", argv[i]);
Kiedy uruchomiono go w symulatorze po prostu wydrukowany jeden "argument" (argv [ 0]), która jest ścieżką aplikacji.
Podejrzewam, że jeśli umieścisz to tutaj i uruchomisz aplikację, która zarejestruje procedurę obsługi adresu URL lub otworzy się z powodu lokalnego powiadomienia lub jakiegoś innego zdarzenia systemowego, zobaczysz adres URL lub inne opcje związane z otwieraniem aplikacji . Jednak jesteś , a nie ma parsować argc/argv [] samemu! Użyj opcji uruchamiania aplikacji dostępnych w metodzie UIApplicationDelegate application:didFinishLaunchingWithOptions:
.
Właśnie to sprawdziłem, a kiedy moja aplikacja jest uruchamiana przez "otwarte", żadne argumenty nie są przekazywane do aplikacji. –
No cóż, domyślam się, że moje przypuszczenie było wtedy złe. Ciekawi mnie jednak, czy masz pełną listę poprawnych opcji debugowania, takich jak rzecz -com.apple.CoreData.SQLDebug? Nie wiedziałem, że taki istnieje i może mi się przyda. – Nimrod
Hmm, ciekawa myśl. ok, dziękuję za odpowiedź. Mam nadzieję, że ktoś ma nieco więcej wglądu. dzięki jeszcze raz! – Tim