2010-10-15 8 views
9

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 :)

Odpowiedz

0

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 ..

+0

Hmm, ciekawa myśl. ok, dziękuję za odpowiedź. Mam nadzieję, że ktoś ma nieco więcej wglądu. dzięki jeszcze raz! – Tim

6

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.

+0

Przepraszam, jestem nowy w tym. Który plik jest plikiem wykonywalnym w domyślnym szablonie iOS? – Tim

+0

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. –

+0

Ahh Rozumiem. Dziękuję ~ – Tim

0

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ń.

+0

Tak właśnie myślałem. Więc tak naprawdę nic nie robią w projekcie, są tam tylko domyślnie? – Tim

2

Patrz: http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Introduction/Introduction.html

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:.

+0

Właśnie to sprawdziłem, a kiedy moja aplikacja jest uruchamiana przez "otwarte", żadne argumenty nie są przekazywane do aplikacji. –

+0

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

Powiązane problemy