2016-04-01 5 views
0

Ich erstelle eine Anwendung mit einem UITabBar für die Navigation, und um mehr als die Standard 5 Tabs Apple Ihnen gibt, verwende ich ein Framework genannt JFATabBarController. Das Framework ist in Objective-C geschrieben, während der Rest meiner App in Swift geschrieben ist. In einer der Registerkarten habe ich eine Liste von Schaltflächen und wenn der Benutzer eine Taste drückt, beginnt er ein Video mit AVPlayerViewController zu spielen. Das Video wird im Portrait-Modus gut, aber sobald das Telefon Landschaft meiner App abstürzt gedreht und gibt mir die folgende Fehlermeldung in der Konsole:- [__ NSArrayM objectAtIndex:]: Index 9223372036854775807 über Grenzen hinweg [0 .. 8] Swift

Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 9223372036854775807 beyond bounds [0 .. 8]' 
*** First throw call stack: 
(0x181c56e38 0x1812bbf80 0x181b36ebc 0x100157efc 0x186daf4b4 0x18714d0f0 0x18714a3b4 0x186ea462c 0x186ea4494 0x18740c32c 0x1870ba244 0x18740c124 
0x186dd8e90 0x186df09c8 0x18740bfe4 0x18709bf30 0x18709d190 0x186e24b6c 0x186e244a0 0x186e1ac20 0x186da21c8 0x181bf8eac 0x181bf86cc 0x181bf844c 
0x181c61494 0x181b36788 0x18253e89c 0x186da183c 0x187060cf0 0x187060c60 0x186da164c 0x186da0eb8 0x186e106b0 0x18341d86c 0x18341d358 0x181c0d85c 
0x181c0cf94 0x181c0acec 0x181b34d10 0x18341c088 0x186e09f70 0x10007c138 0x1816d28b8) 
libc++abi.dylib: terminating with uncaught exception of type NSException 

Die App im Porträt ist, so dass es nicht einmal möglich sein sollte, sich in die Landschaft verwandeln.

Der Fehler Thread 1: signal SIGABRT in Zeile 119 von JFATabBarController.m geworfen wird:

UIButton *oldButton = self.tabButtons[self.selectedIndex]; 

tabButtons ist ein NSMutableArray auf Linie 73 von JFATabBarController.m definiert:

- (NSMutableArray *)tabButtons 
{ 
    if (!_tabButtons) 
    { 
     _tabButtons = [NSMutableArray new]; 
    } 
    return _tabButtons; 
} 

Und self.selectedIndex ist der Index des View-Controllers, der dem aktuell ausgewählten Tab-Element zugeordnet ist. wie es in den Apple-Dokumenten heißt.

Nun habe ich einige Nachforschungen angestellt und herausgefunden, dass 9223372036854775807 die größte mögliche Variable und auch die Konstante NSNotFound ist. Ich habe auch gelesen, dass ich nach NSNotFound mit einer if Aussage überprüfen muss, aber wenn ich das versuche, stürzt die APP noch ab und verschiebt den Fehler zur if Aussage.

So zur Zeit bin ich ein wenig aus Ideen und ich hoffe, dass es ein paar geschickte Leute hier, die mir helfen können! Vielen Dank!

+0

Können Sie uns den Code zeigen, wenn Sie nach 'NSNotFound' suchen, das nicht funktioniert? – Sulthan

Antwort

2

Wie Sie darauf hingewiesen haben, ist self.selectedIndex gleich NSNotFound.
Sie könnten Ihren Code wie folgt aktualisieren:

if (self.selectedIndex != NSNotFound) { 
    UIButton *oldButton = self.tabButtons[self.selectedIndex]; 
    ... 
} 

Bei self.selectedIndex auf andere ungültige Werte eingestellt werden kann, können Sie die Bedingung nicht aktualisieren (um sicherzustellen, dass es innerhalb von Grenzen ist) wie folgt:

if (self.selectedIndex >= 0 && self.selectedIndex < [self.tabButtons count]) ... 

* self.selectedIndex >= 0 wird nur benötigt, wenn nicht vorzeichenlos ist.

+0

Danke! Das hat perfekt funktioniert! Ich habe die falsche Syntax verwendet, als ich das gleiche versuchte. –

Verwandte Themen