ORIGINAL POSTtableView.dequeueReusableCellWithIdentifierは()我々は最近スウィフト2.0、およびiOS9に我々のアプリを変換したアプリが
がハングアップする原因となります。私が見ている1つの奇妙な問題は、tableView.dequeueReusableCellWithIdentifier()を呼び出すと、アプリケーションがシミュレータにハングアップするということです。
コード100%
で
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
//hangs on the line below
let headersection: HeaderSectionCell = tableView.dequeueReusableCellWithIdentifier("SectionHeader") as! HeaderSectionCell
...
return headersection
}
ヘッダセル
class HeaderSectionCell: UITableViewCell {
@IBOutlet var labelOne: UITextView!
@IBOutlet var labelTwo: UITextView!
@IBOutlet var textView: UITextView!
}
シミュレータCPU使用ペグ3210 Xcodeで一時停止した後、このSwift機能で停止しています。ここで
のiOSは、カバーの下にループしているルーチンの一部です。
最後に、dequeueReusableCellWithIdentifierに私たちのスウィフトの呼び出し()
は、この特定の吊りインスタンスが機能tableView(tableView: UITableView, viewForHeaderInSection section: Int)
からですが、我々はまたの呼び出しの内側にぶら下がっていますtableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)
、同じ問題があります。
私はストーリーボードエディタでセルのプロパティを使って遊んでみましたが、うまく動作している他のビューとは異なるものはありません。
EDIT
財団とlibobjc.A.dylib間の無限ループがdequeReusableCellWithIdentifier()への呼び出しの下に、存在すると思われます。私はFoundationが他のフレームワークの前にインポートされていることを確認し、問題のUITableViewCellを独自のクラスに抽象化しました(再利用されました)。問題の元の呼び出しは現在機能していますが、私が把握しようとしているSwiftカバーの下でループしている別の呼び出しがあります。無限ループで一時停止を押す
は、同じアセンブリのスタックの場所に私を置く:一時停止後のスタックトレースの
トップ:別の一時停止後のスタックトレースの
libobjc.A.dylib`objc_msgSend:
0x107f6a800 <+0>: testq %rdi, %rdi
0x107f6a803 <+3>: jle 0x107f6a850 ; <+80>
0x107f6a805 <+5>: movq (%rdi), %r11
0x107f6a808 <+8>: movq %rsi, %r10
0x107f6a80b <+11>: andl 0x18(%r11), %r10d
0x107f6a80f <+15>: shlq $0x4, %r10
0x107f6a813 <+19>: addq 0x10(%r11), %r10
0x107f6a817 <+23>: cmpq (%r10), %rsi
0x107f6a81a <+26>: jne 0x107f6a820 ; <+32>
-> 0x107f6a81c <+28>: jmpq *0x8(%r10)
トップ:
Foundation`-[NSLocalizableString length]:
0x1071c5cbc <+0>: pushq %rbp
0x1071c5cbd <+1>: movq %rsp, %rbp
-> 0x1071c5cc0 <+4>: movq 0x80461(%rip), %rax ; NSLocalizableString._developmentLanguageString
0x1071c5cc7 <+11>: movq (%rdi,%rax), %rdi
0x1071c5ccb <+15>: movq 0x7436e(%rip), %rsi ; "length"
0x1071c5cd2 <+22>: popq %rbp
0x1071c5cd3 <+23>: jmpq *0x8ea77(%rip) ; (void *)0x0000000107f6a800: objc_msgSend
を
これら2つの下位レベルのルーチンの間を行き来するだけで、シミュレータCPUの100%を消費します。あなたはまた、正しくないviewForHeaderInSectionのセルをロードしようとしているdequeueReusableHeaderFooterViewWithIdentifier
代わりdequeueReusableCellWithIdentifier
の
なぜ私は再利用可能なセルをデキューできなかったのか理解しようとしたが、私は窓から飛び降りるほどだった。それから、私はあなたのポストにつまずいた。私は自分自身に "これが問題/修正となる方法はありません"と考えました - 低く、問題を修正しました。おそらく私はリリースノートでこれを逃したでしょう。「ローカリゼーションを選択しなければ、無限ループに入るでしょうが、私たちはあなたに言いません」ありがとうございました! – fischgeek