2016-04-01 13 views
0

私はナビゲーションのためにUITabBarでアプリケーションを作成しています。 JFATabBarControllerと呼ばれます。 フレームワークはObjective-Cで書かれていますが、残りのアプリケーションはSwiftで書かれています。タブの1つにボタンのリストがあり、ユーザーがボタンを押すとAVPlayerViewControllerを使ってビデオを再生し始めます。ビデオは、ポートレートモードで罰金果たしたが、すぐに電話が私のアプリがクラッシュした風景になっているとして、私にコンソールに次のエラーを与える:- [__ NSArrayM objectAtIndex:]:インデックス9223372036854775807境界を越えて[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 
それも可能ではありませんので、アプリは肖像画である

景色に変わる

エラーThread 1: signal SIGABRTがJFATabBarController.mのライン119でスローされる:

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

tabButtonsはJFATabBarController.mのライン73上に定義されたNSMutableArrayある:

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

そしてself.selectedIndexインデックスであります現在選択されているタブ項目に関連付けられたビューコントローラの Apple docsに記載されています。

私はいくつかの研究を行い、9223372036854775807が可能な限り大きな変数であり、定数がNSNotFoundであることを知りました。また、私はifステートメントでNSNotFoundをチェックする必要があることを読んだが、私はそれを試しても、アプリケーションはまだクラッシュし、ifステートメントにエラーを移動します。

現在、私はちょっとしたアイデアがありません。私はそこに熟練した人々が私を助けてくれることを願っています!ありがとう!

+0

「NSNotFound」が動作しないことを確認するときにコードを表示できますか? – Sulthan

答えて

2

あなたが指摘したように、self.selectedIndexNSNotFoundに等しいです。次のように
あなたはあなたのコードを更新することができます:ケースself.selectedIndexで

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

は、他の不正な値に設定することができ、あなたは次のように(それは境界内だことを確認する)条件を更新することができます:

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

* self.selectedIndex >= 0は、selectedIndexが署名されていない場合にのみ必要です。

+0

ありがとうございました!それは完璧に働いた!私は同じことをしようとしたときに間違った構文を使用しました。 –

関連する問題