2017-12-07 16 views
0

に細かい作業これは私がiOSの9と10を備えたデバイス上で取得していますエラーです:のiOS - NSInternalInconsistencyExceptionはiOSの9で発生し、10が、iOSの11

***キャッチされない例外により「NSInternalInconsistencyExceptionにアプリを終了」、理由: 『コレクションビュー内の唯一の1 セクション』

がある場合、エラーが私には明らかと思われる部分9223372036854775807前 アイテム数の要求、しかし、私はこれが起こっていない理由を理解することができませんiOS 11を搭載した端末の場合。

私はそれを修正する方法がわかりません。ここで

は私のコードです:

extension MainTileViewController: MainForecastsDelegate { 
func mainForecasts(_ forecastVC: MainForecastsViewController!, didChangeWith object: Any!) { 
    if let cell = self.outletWeatherForecastCollectionView.cellForItem(at: self.currentIndexPath) as? MainTileCollectionViewCell { 
     // Some stuff... 
    } 
} 

クラッシュがここに起こります。これは、ユーザーが日などを切り替えるときに起動されるプロトコルメソッドです。

明らかに私はcurrentIndexPathに問題があります。ここで

は私の初期化です:

var currentIndexPath : IndexPath = [] 

とのviewDidLoadで:

self.currentIndexPath = IndexPath(item: 0, section: 0) 

それがクラッシュしないように、どのように私は私のコードを確保することができますか? iOS 9/10のコレクションビューとiOS 11のコレクションビュー(プリフェッチを除く)の動作の違いを説明できますか?

答えて

2

何が起きているのですか?currentIndexPath = []は、itemまたはsectionに値を割り当てていません。 「空の」IndexPathを作成しています(IndexPathオブジェクトは基本的に任意の長さのタプルまたは値の配列で、作成/操作できます)。その方法でそれを使用しようとするコード(cellForItem呼び出しに渡すなど)は、未定義の動作を潜在的に持つことになります。何かが効果的に紛失したsectionの値を-1として解釈していて、何かが-1をunsigned 64-bit integerとして解釈しているように見えます。あなたが今持っている同じ一般的なロジックを使用したい場合は

代わりに、私は、オプションとしてindexPathを宣言することをお勧めしたい:

var currentIndexPath: IndexPath? 

その後、currentIndexPathのあなたの用法であれば、聞かせての構文を使用します。

extension MainTileViewController: MainForecastsDelegate { 
func mainForecasts(_ forecastVC: MainForecastsViewController!, didChangeWith object: Any!) { 
    if let currentIndexPath = currentIndexPath, 
     let cell = outletWeatherForecastCollectionView.cellForItem(at: currentIndexPath) as? MainTileCollectionViewCell { 
     // Some stuff... 
    } 
} 

これはスウィフトのイディオムに続いて、「不明な」インデックスパスから始まるという概念を明確にしています。

しかし、@picciano's answer suggestsとすると、iOSアプリのより大きなデザインパターンに合わせて全体のデザインを再考することができます。

0

あなたのアプローチを少し変更することをお勧めします。あなたのコレクションのビューのセルのサブクラスが、おそらく通知から自分自身を更新する責任を持つようにします。索引パスまたはセルへの参照を保持しようとすると、再利用される傾向があるため、常に問題があります。

関連する問題