問題タブ [nsindexpath]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
multithreading - NSIndexPath はスレッドセーフですか?
Apple のマルチスレッド ドキュメントNSIndexPath
には、スレッドセーフかどうかが記載されていません。不変クラスとして、私は一般的にそれがスレッドセーフであることを期待しています。
NSIndexPath
以前は、インスタンスが共有され、グローバルに一意であると述べていたドキュメントが使用されていたと確信しています。しかし、それは今では消えているようで、iOS5 / Mac OS X 10.7 でデザインが変更されたのではないかと疑っています。
Mac OS X 10.6 (Snow Leopard) を使用しているお客様から、インデックス パスにアクセスしようとしてクラッシュしているように見えるクラッシュ レポートが多数寄せられています。したがって、私は疑問に思います: 実際のインスタンスはスレッドセーフですが、共有キャッシュからそれらを引き出すためのロジックはそうではありませんか? 誰か洞察力がありますか?
ところで、スタック トレースの例を次に示します。
私にとって、それは、NSIndexPath
自分自身を割り当て解除されたインスタンスと比較しようとしているインスタンスです。
objective-c - selectRowAtIndexPath: アニメーション化: scrollPosition: - 行は「選択」されています
次のコードを使用して、tableView の上部にスクロールしています。
うまく機能しますが、ターゲット行が「選択」されないようにしたいと思います。下の画像を参照してください。
このコードの実行後に行を「選択解除」する方法についてのアイデアはありますか? それとも、そもそもターゲット行を「選択」しない方法でこのコードを実行しますか?
iphone - UITableViews間でNSIndexPathを渡します
UITableView
plistファイルからの表示データがあります。このテーブルビューでNSArray
は、plistファイルの内容からを作成し、データを各セルにフィードしました。ただし、セルがタップされると、次のテーブルビューコントローラーがタップされたセルのインデックスパスを認識し、このビューコントローラーが配列内の詳細を表示するアイテムを認識できるようにする必要があります。私は次の方法を試しました:
上記では、タップしたセルのインデックスパスをNSIndexPath
、新しいViewControllerで作成したオブジェクトに渡そうとしています。
次のテーブルビューコントローラのヘッダーファイル:
ここでselectedIndexPath
は、前のViewControllerで設定されたオブジェクトを定義します。
しかしselectedIndexPath
、関連データを表示するためにオブジェクトにアクセスしようとすると、オブジェクトは次のように見えますnil
。
selectedIndexPath
オブジェクトに正しくアクセスしていませんか?正しいインデックスパスを次のViewControllerに渡すための優れた方法はありますか?
iphone - 別のクラスを使用してセルを削除するときの NSInvalidArgumentException
コードの更新: Matthew の回答に続いて、コードをより正確に修正しようとしました。コードはセルを削除しますが、クラッシュしてエラーが発生します。
* キャッチされていない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。理由: '* -[__NSPlaceholderArray initWithObjects:count:]: オブジェクト [0] から nil オブジェクトを挿入しようとしています'
checkboxTapped
以下のコードは、私のコードで呼び出されたアクションからのものCustomCell
です。アクションが起動されると、エラーが発生します。myindexPath
が に等しいことがわかりましたNULL
。これが問題である可能性が最も高いです。しかし、私はそれを修正する方法がわかりません。
Old:コードを調べて、使用していた配列を印刷しました。問題ないように見えますが、このエラーは引き続き発生します。
* キャッチされない例外 'NSRangeException' が原因でアプリを終了します。理由: '* -[__NSArrayM removeObjectAtIndex:]: 境界を超えたインデックス 1 [0 .. 0]'
私の推測では、それは私と関係があると思われましたが、私indexPath
がどれだけ変更してもそれほど違いはありません.
ios - UITableViewの特定のセクションのみを編集可能にする
複数のセクションを持つUITableViewがあり、1つのセクションのみを編集可能にしたい(スワイプして削除)。
デリゲートメソッドで何かしなければならない気がしますがwillBeginEditingRowAtIndexPath
、理解できないようです。
objective-c - NSIndexPath をインクリメントする方法
インデックス パスを使用したいデータ状況があります。データをトラバースしているときに、NSIndexPath の最後のノードをインクリメントしたいと考えています。私がこれまでに持っているコードは次のとおりです。
これは少し不格好に感じます - もっと良い方法はありますか?
ios - UITableView selectRowAtIndexPath のアサーション エラー
これは特別な注意が必要な問題だと思います... 私の Google-fu はかなり良いのですが、役に立つものは何も得られませんでした。
これは最も単純なことですが、何が問題なのかわかりません。
私はUITableViewを持っています。私の VC が _form を呼び出すサブビューです。実際にデータを表示するためではなく、スタイリングの目的で使用しています。2セルあります。
特定のイベントで、selectRowAtIndexPath:animated:scrollPosition を使用して別のセルを選択しようとしています。
私がこれを行うと、SIGABRTS.
簡単な例:
ボタンのタイトルが変更され、選択された行が 0 または 1 であることが表に出力されますが、目的のセルを選択しようとすると、次のように壊れます。
これは、テーブルの構成方法に問題があることを意味していると思いますが、何が原因かはわかりません。tableView:didSelectRowAtIndexPath. これを除いて、他のすべては私がこのように設定した方法で問題なく動作します。
(また、「(gdb)」だけでなく、追加のデバッグ情報で返信している他の人もいます。どうすればこれを入手できますか?)
ありがとう!
memory-leaks - UITableView - moveRowAtIndexPath によりメモリ リークが発生する
概要
- iOS プロジェクトで
UITableView
は、UITableView の行を移動しようとしています。 - 私のモデルでは、データの順序が変更されているため、テーブルで視覚的に表示しようとしています。そのため、
UITableView
の方法を使用しましたmoveRowAtIndexPath:toIndexPath:
- そのために
NSIndexPath
、UITableView のメソッドに渡すインスタンスを作成しました。
漏れが発生したとき
- メソッドを使用して NSIndexPath インスタンスを作成し
indexPathForRow: section:
(コード セクションを参照)、それをUITableView
のメソッドmoveRowAtIndexPath: toIndexPath:
に渡すと、リークが発生します。
ノート:
- ARC(自動参照カウント)を使用しています
- X コード 4.3.1
- Instruments (Xcode メニュー - Product > Profile) を使用して、メモリ リークを特定しました。
コード: (UITableViewController 内)
私が試した手順
- メソッドの呼び出しをコメント アウトすると
moveRowAtIndexPath:originalIndexPath toIndexPath:
、メモリ リークが防止されます 私は手動で使用
CFRelease
しました(これが自動参照カウント環境での良い習慣であるかどうかはわかりません)CFRelease((__bridge void *)toIndexPath);
質問:
- なぜこれが起こるのですか?それに対する解決策はありますか?
- 計測器のメモリ リークの結果は正確ですか?
- UITableView のメソッドにバグはあります
moveRowAtIndexPath:originalIndexPath toIndexPath:
か? - CFRelease はオプションですか? CFRelease が既に解放されているメモリを解放しようとした場合にアプリがクラッシュするのを防ぐ安全な方法はありますか (上記の正確なコードを参照)。
uitableview - 完了したナビゲーションコントローラーアニメーションの確認
ビューコントローラーをアニメーション付きのナビゲーションコントローラーにプッシュする場合は、アニメーションが完了するまで待ってから別のビューコントローラーをプッシュする必要があることがわかりました。そうしないと、警告が表示され、予期しない結果が生じる可能性があります。
この問題を回避するために、navコントローラーのアニメーションが完了したかどうかをどのように確認しますか?
ありがとう
objective-c - UITableViewController から UITableView の 0 番目のセクションに到達できません
ユーザーが情報(質問と選択肢)を入力するテーブルビューフォームがあります。基本的に、ユーザーが最後のセクションをクリックすると、テキストフィールドやその他の要素が収集されます。
関数ではdidSelectRowAtIndexPath
、これらのテキスト フィールドにアクセスして値を取得しようとしています。
コンソールに次の出力が表示されます。
つまり、セクション 0 のテキスト フィールドにアクセスできません。2 行目を追加しようとしたところ、null も返されました。質問セルと選択肢セルのセクションを入れ替えてみたところ、選択肢に対応するセクション 0 に対して null が返されました。質問セルはうまくいきました。また、セクション番号を増やしてみたので、質問セルはセクション 1、選択肢はセクション 2 などでした...その後、セクション 1 に対して null が返されました。何が起こっているのか理解できませんでした。これは本当に奇妙な問題です。
ちなみに、がセクション 0 の行のインデックス パスと等しいdidSelectRowAtIndexPath
場合、セルにアクセスできます。indexPath
[NSIndexPath indexPathForRow:0 inSection:0]
たとえば、didSelectRowAtIndexPath
次のようになります。
セクション 0 の質問入力に「fooBar」と書き込み、セクション 4 のセル ([質問] ボタン) をクリックすると、次の出力が得られます。
質問入力のあるセルであるセクション 0 のセルをクリックすると、次のようになります。
前もって感謝します...