-2

私は現在、検索バーと検索表示コントローラーを備えた UITableViewController にプッシュするボタンが付いた ViewController を持つアプリケーションに取り組んでいます。セルにいくつかのデータがあり、それが入力されます。次のコードを追加して、検索バーを非表示にし、表示されたときにクリアカラーにします。

[[self.searchBar.subviews objectAtIndex:0] removeFromSuperView];
[self.searchBar setBackgroundColor:[UIColor clearColor]];
CGRect newBounds = [[self tableView]bounds];
newBounds.origin.y = newBounds.origin.y + searchBar.bounds.size.height;
[[self tableView] setBounds:newBounds];

これは、iOS シミュレーターを使用しているときに機能しますが、デバイスで実行して上下にスクロールし始めると、クラッシュして次のエラーが表示されます。

EXC_BREAKPOINT (code = EXC_ARM_BREAKPOINT, subcode = 0xdefe)

次に、Zombie Objects を有効にしてさらにデバッグすると、次のようになりました。

-[UIView frame]: message sent to deallocated instance 0x156b1430

離陸時:

[[self.searchBar.subviews objectAtIndex:0] removeFromSuperView];
[self.searchBar setBackgroundColor:[UIColor clearColor]];

デバイスでアプリケーションを再度実行すると、クラッシュせず、正常に動作します。

何が起こっているのか、これがどのように起こっているのか、誰にもアイデアがありますか? 前もって感謝します!

4

3 に答える 3

0

UISearchBar には unsafeunretained 参照があると思います[self.searchBar.subviews objectAtIndex:0];

の Bounds を設定し、 のUITableViewフレームを変更しUITableViewます。自動サイズ変更とlayoutSubviews.

[self.searchBar.subviews objectAtIndex:0].frame したがって、レイアウトまたは自動サイズ変更のための UISearchBar の layoutSubviews メソッド アクセス。

UIControlsビューをSDK から変更することはお勧めしません。hidden=YES代わりに設定するという考えがありremoveFromSuperviewます。

于 2013-09-05T05:26:18.043 に答える
0
    [[self.searchBar.subviews objectAtIndex:0] removeFromSuperView]; 

    //This Line remove search bar from view ,which means it is deallocated at that moment so when you again try to remove it ,,the app crash ..
  //  So,instead of this try to hide searchbar ,,

    Self. searchBar.hidden =YES;
于 2013-09-05T04:12:22.340 に答える
0

私はこれと同じ問題を抱えていました。このページに行き、質問の「ゾンビ オブジェクト」という言葉を読み、ゾンビ オブジェクトを有効のままにしていたことを思い出しました。それらを無効にした後、問題は解決しました。tableView をスクロールしても、クラッシュは発生しません。

これは奇妙かもしれませんが、おそらく誰かを助けるでしょう...

于 2014-04-19T17:58:39.867 に答える