kładę całą didFinishLaunchingWithOptions
z minimalnym kodu, który jest tutaj:iOS udało się uruchomić w czasie 0x000000008badf00d - opóźnienie w applicationDidBecomeActive
[UIApplication sharedApplication].idleTimerDisabled = YES;
m_bDataLoadingNeeded = YES;
return YES;
W rezultacie musiałem kluczową inicjalizacji w applicationDidBecomeActive
. Mimo to otrzymuję powyższy błąd.
Wszystkie odniesienia, o których mówię, wspominają o ukończeniu didFinishLaunchingWithOptions
wcześniej, co zrobiłem. Czy jest wymagana kontrola dla applicationDidBecomeActive
?
Mój dziennik katastrofy jest tutaj (jakoś nie mogę symbolicate jej wszelkie dsym i aplikacji na miejscu, więc nie mogę wiedzieć, które stwierdzenie jest dokładna winowajcą. Ale każdy widzi, że to na pewno nie didFinishLaunchingWithOptions
)
Exception Type: 00000020
Exception Codes: 0x000000008badf00d
Highlighted Thread: 0
Application Specific Information:
<MyBundleID> failed to launch in time
Elapsed total CPU time (seconds): 1.600 (user 1.600, system 0.000), 4% CPU
Elapsed application CPU time (seconds): 0.438, 1% CPU
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0:
0 libsystem_kernel.dylib 0x3c66f0fc 0x3c65e000 + 69884
1 libsystem_c.dylib 0x3c5b8124 0x3c5b7000 + 4388
2 SystemConfiguration 0x360d43ca 0x360c0000 + 82890
3 MyApp 0x001cd406 0xf9000 + 869382
4 MyApp 0x001ccb78 0xf9000 + 867192
5 MyApp 0x001cd148 0xf9000 + 868680
6 MyApp 0x001d77e4 0xf9000 + 911332
7 MyApp 0x001d7ed0 0xf9000 + 913104
8 MyApp 0x001cd908 0xf9000 + 870664
9 MyApp 0x001d46e0 0xf9000 + 898784
10 MyApp 0x000fb870 0xf9000 + 10352
11 UIKit 0x36177af6 0x36102000 + 482038
12 UIKit 0x3615d9bc 0x36102000 + 375228
13 UIKit 0x36105c34 0x36102000 + 15412
14 UIKit 0x361056c8 0x36102000 + 14024
15 UIKit 0x36105116 0x36102000 + 12566
16 GraphicsServices 0x37dfb5a0 0x37df5000 + 26016
17 GraphicsServices 0x37dfb1ce 0x37df5000 + 25038
18 CoreFoundation 0x342d2170 0x3423b000 + 618864
19 CoreFoundation 0x342d2112 0x3423b000 + 618770
20 CoreFoundation 0x342d0f94 0x3423b000 + 614292
21 CoreFoundation 0x34243eb8 0x3423b000 + 36536
22 CoreFoundation 0x34243d44 0x3423b000 + 36164
23 UIKit 0x3615c480 0x36102000 + 369792
24 UIKit 0x361592fc 0x36102000 + 357116
25 MyApp 0x000fb4be 0xf9000 + 9406
26 MyApp 0x000fb474 0xf9000 + 9332
Zważywszy applicationDidBecomeActive
jest rzeczywiście winowajcą:
mogę przenieść moją applicationDidBecomeActive
inicjalizacji wewnątrz wątku tła - coś zupełnie uproszczone like this, ale nie jestem pewien, co inne rzeczy muszę zrobić, b ponieważ ten kod inicjalizujący z kolei wewnętrznie odrodzi więcej wątków. Używam AFNetworking, Reachability i innych frameworków opartych na blokach. Nie wiem, czy skończę, robiąc tak wiele modyfikacji już zbudowanej architektury i wspólnego kodu.
Jestem bardzo zdezorientowany, jak rozwiązać ten problem w najlepszy i najkrótszy możliwy sposób.
'0x8badf00d' ... typowe, dlaczego blokujesz główny wątek podczas uruchamiania? zadanie, które wymaga zbyt długiego czasu, musi zostać umieszczone w wątku tła. – holex
Użyj instrumentów, aby znaleźć część kodu, która blokuje główny wątek i zoptymalizować go. Nie optymalizuj rzeczy, o których nic nie wiesz, może to pogorszyć sytuację. – Kerni
Wiele rzeczy jest w rzeczywistości w tle, ale nie w taki sposób, w jaki widzę, np. Wywołania AFNetworking itp. Moje zamieszanie polega na tym, jak owijam całą tę rzecz w jeszcze jedno wywołanie w tle? Ponadto, naprawdę nie widzę żadnego słowa ostrożności dla applicationDidBecomeActive - zobaczyłem też, że jest on wywoływany po moim pierwszym viewdidLoad. –