2012-04-13 9 views
4

ナビゲーションビュー内に戻るボタンを使用してモーダルテーブルビューを表示します。戻るボタンは、モーダルビューのデリゲートにメッセージを送信して、モーダルビューを閉じます。テーブルビューのスクロール中に戻るボタンをタップするとアプリケーションがクラッシュする

(int) $1 = 251086416 [no Objective-C description available] 
:I PO 0xef74650が、私はこれを取得すると

*** -[UILayoutContainerView setUseFastMode:]: message sent to deallocated instance 0xef74650 

:私はテーブルビューをスクロールした場合は、テーブルビューはまだスクロールしている間に、このメッセージでアプリがクラッシュし、ナビゲーションバーの[戻る]ボタンをタップします

誰もがこれまでに経験したことはありますか?回避策または修正プログラムは何ですか?

答えて

8

これは、現在スクロールしているモーダルの解除をアニメーション化するときに発生するiOS 5.1のバグだと思います。私は、私のアプリがクラッシュしているという報告をユーザーから得ていました。調査したところ、同じエラーがありました。

最小限のコード/ビューで新しいプロジェクトを作成し、このクラッシュを再現できました。これまでに私が見つけた唯一の回避策は、モーダルを解除するときにアニメーションを無効にすることです。私はAppleにバグレポートを提出しました。

+0

あなたの回避策を確認できます。ありがとう。私はアニメーションの移行なしでビューが消えていく様子が好きではありませんが、アプリをクラッシュさせてしまいます! Appleがこれを修正することを願っています。 Appleがこのバグを修正した場合、この回答を将来更新してください。 – tlatkovich

+1

これは私のために働いた: NSIndexPath * myIP = [NSIndexPath indexPathForRow:0 inSection:0]; [self.tblChildProducts scrollToRowAtIndexPath:myIP atScrollPosition:UITableViewScrollPositionTop animated:NO]; [self dismissModalViewControllerAnimated:YES]; – Slee

+0

上記のコメントを無視してください! – AWinter

0

setUseFastMode:にチェックインして、後でアクセスしようとしているものをリリースしていないことを確認してください。

[someObject release]; 
+0

で'12メソッドsetUseFastModeは、Appleが開発者に利用できるようにしていないことのiOS SDKの一部です。私はそれが何であるか、それが何かを知らない。それは本質的に私がアクセスすることができないブラックボックスです。 – tlatkovich

1

iOS 5には、UIViewのFastModeAdditionsカテゴリにバグがあります。このバグは、モーダルビューコントローラが破棄されるのと同じ実行ループでスクロールされているスクロールビューのサブビューがある場合に表示されます。

Exception Type: EXC_BAD_ACCESS (SIGSEGV) 
Exception Codes: KERN_INVALID_ADDRESS at 0xa0000008 
Crashed Thread: 0 

Thread 0 name: Dispatch queue: com.apple.main-thread 
Thread 0 Crashed: 
0 libobjc.A.dylib     0x34bdef78 objc_msgSend + 16 
1 UIKit       0x35309f9e -[UIView(FastModeAdditions) _setContainerLayoutViewForFastMode:] + 98 
2 UIKit       0x351701cc -[UIView dealloc] + 568 
3 UIKit       0x3545a39e -[UIDropShadowView dealloc] + 86 
4 libobjc.A.dylib     0x34be016e _objc_rootRelease + 30 
5 CoreFoundation     0x32b882e0 CFRelease + 88 

ベストプラクティスはperformSelector:afterDelay:dismissalです。これにより、後に実行されるループで強制的に解雇が強制され、クラッシュが発生しなくなります。モーダル内部のボタンをタップすると、その表がまだスクロールされた場合は、このクラッシュを取得するとき、私は、モーダルを却下された

0

のiOS 6に

これは発生しません。これは間違っていました。ディスプレイコードをプレゼンテーションビューコントローラーに移動し、それをデリゲートメソッドの一部として呼び出すと、クラッシュは発生しなくなりました。

3

同様の問題がありましたが、テーブルがまだスクロールしていて、テーブルの上に表示されるようにモーダルビューが表示された場合、アプリがクラッシュしていました。インスタンスのクラッシュがcellForRowAtIndexPathにスローされ、indexPathの割り当てが解除されました。

私はviewWillDisappear方法でスクロールを停止することによってそれを修正: -

- (void) viewWillDisappear:(BOOL)animated { 
    [self.tableView setContentOffset:self.tableView.contentOffset animated:NO]; 
} 

がうまくいけば、これは誰かが関連の問題を研究に役立つかもしれません!

+0

この問題はまだiOS 9.2に存在するようですが、修正していただきありがとうございます。 –

0

これは私の仕事:

NSIndexPath *myIP = [NSIndexPath indexPathForRow:0 inSection:0] 
[self.tblChildProducts scrollToRowAtIndexPath:myIP atScrollPosition:UITableViewScrollPositionTop animated:NO] 
[self dismissModalViewControllerAnimated:YES] 

@Sleeを5月24日11時18

関連する問題