2014-09-24 29 views
11

Moja aplikacja (tylko iOS 8) została odrzucona z powodu awarii podczas próby IAP. Próbowałem prawie wszystkie inkantacje procesu zakupu w kompilacji AdHoc, ale nie mogę odtworzyć awarii. Patrząc na dziennik awarii, do którego dołączył zespół recenzentów, widzę bardzo dziwny ślad stosu w ostatnim śledzeniu wyjątku. Wygląda na to, że awaria dotyczy UIPopoverController, jednak moja aplikacja, chociaż uniwersalna, nie jawnie ani niejawnie wyświetla popovers w dowolnym miejscu. Czy ktoś ma pojęcie, co może wywołać działanie powodujące tę awarię? Co może spowodować, że moja aplikacja będzie wyświetlać przesileń, gdy tylko zespół sprawdzający ją obejrzy?Awaria aplikacji w UIPopoverPresentationController, ale brak wyraźnych przeskoków?

Last Exception Backtrace: 
0 CoreFoundation    0x186d52084 __exceptionPreprocess + 132 
1 libobjc.A.dylib    0x1977a40e4 objc_exception_throw + 60 
2 UIKit       0x18bc0aee0 -[UIPopoverPresentationController presentationTransitionWillBegin] + 2464 
3 UIKit       0x18b7d27d8 __71-[UIPresentationController _initViewHierarchyForPresentationSuperview:]_block_invoke + 1324 
4 UIKit       0x18b7d1310 __56-[UIPresentationController runTransitionForCurrentState]_block_invoke + 212 
5 UIKit       0x18b557388 _applyBlockToCFArrayCopiedToStack + 356 
6 UIKit       0x18b4c8e4c _afterCACommitHandler + 532 
7 CoreFoundation    0x186d0a388 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 32 
8 CoreFoundation    0x186d07314 __CFRunLoopDoObservers + 360 
9 CoreFoundation    0x186d076f4 __CFRunLoopRun + 836 
10 CoreFoundation    0x186c35664 CFRunLoopRunSpecific + 396 
11 GraphicsServices    0x18fd435a4 GSEventRunModal + 168 
12 UIKit       0x18b53a984 UIApplicationMain + 1488 
+2

Czy wyświetlasz kontroler UIActivityView w dowolnym momencie? Jeśli tak, to prawdopodobnie ulegasz awarii podczas wyświetlania na iPadzie] (http://stackoverflow.com/questions/25644054/uiactivityviewcontroller-crashing-on-ios8-ipads). Wydaje się, że w iOS8 Apple wyświetli losowe bity interfejsu użytkownika. Poszukaj miejsc, w których prezentujesz kontroler UIViewController i spróbuj ustawić wymagane informacje we właściwości 'popoverPresentationController' w VC. To jest tylko iOS8, więc musisz sprawdzić, czy odpowiada on temu selektorowi. –

+0

Przedstawiam kontroler widoku aktywności, ale nigdzie w strumieniu nie są one cytowane, gdy aplikacja została odrzucona. Nie wiem też, dlaczego byłby to problem tylko w ramach przeglądu aplikacji, a nie w kompilacjach wersji AdHoc. – nickbona

+0

Możliwe, że łapiesz wyjątek w swoich kompilacjach, ale Apple łamie punkt wyjścia wyjątku? Nie mogę porozmawiać z tym, co Apple zrobił, ale myślałem, że nie testowałeś na iPadzie? To * nie powinno * być różne w dystrybucjach adhoc, więc jeśli kontroler widoku aktywności działa na iPada dla ciebie lokalnie, to nie może to być problem. Ale tak jak powiedziałem, jeden z twoich kontrolerów widoku kończy się prezentacją popover. –

Odpowiedz

-2

Najpierw należy sprawdzić, czy kontroler UIPopoverPresentationController jest dostępny, czy nie.

NSArray *Items = [NSArray arrayWithObjects:emailBody,anImage, nil]; 

    UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:Items applicationActivities:nil]; 

    if ([UIPopoverPresentationController class] != nil) { 
     UIPopoverPresentationController *popover = activityController.popoverPresentationController; 
     if (popover) 
     { 
      popover.sourceView = sender; 
      //popover.sourceRect = sender.bounds; 
      popover.permittedArrowDirections = UIPopoverArrowDirectionAny; 
     } 
    } 


    [self presentViewController:activityController animated:YES completion:NULL]; 
+0

proszę podać wyjaśnienie kodu – arghtype

+0

UIPopoverPresentationController klasa nie znaleziono kompilatora w ipad-ios8 lub wyżej, więc aplikacja ulega awarii. więc najpierw sprawdzamy klasę UIPopoverPresentationController dostępną lub nie –

4

Nie wiem, czy to ta sama przyczyna jak oryginalne pytanie, ale mam dokładnie ten sam błąd i problem został przy użyciu UIAlertController ze stylem ActionSheet, prezentując to działało dobrze na iPhone, ale iPad wymaga sourceview do ustawić - https://stackoverflow.com/a/24233937/285694