1

iPhone 4でiOSソフトウェアを更新してから、開発中のアプリが遅れ始めました。これは、UISearchFieldに入力を与えているときにのみ発生します。

「ラグ」は、iOSキーボードで約30文字をタップしたときに発生します。その後、連続するすべてのタップが遅れて、電話自体が入力を処理できなくなったように感じます。

検索フィールドに3文字以上を入力するたびに、データベースに対してSelectsを実行するUISearchDisplayControllerがあります。

ここにいくつかのコードがあります。

実際の検索

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{


    if ([searchText length] >= 3)
    {


        if (searchObject != nil)
        {
            searchObject = nil;
            searchObject = [[FritextSok alloc]init];
            [searchObject setDelegate:self];
        }

        [searchObject setSearchstring:searchText];

        [searchObject search];



    }
    else
    {

        // Displays non filtered results.
    }


}

iOS6シミュレーターの実行中にもこれが発生しています。

また、iOSキーボードの「ラグ」は別として。さまざまなビューコントローラのすべてのUISegmentedControlは、描画にFOREVERを要するようです。これは、キーボードのマッシュ後に発生します。

私はセルを適切に再利用していますが(私は思う)、4.3から5.1までのすべてのiOSバージョンで完全に動作しているように見えるため、これを引き起こしている原因は実際にはわかりません。

searchObjectを割り当てるさまざまな方法を試しました。何も役に立たないようです。

編集

これは散発的に表示されるエラーメッセージです

purgeIdleCellConnections: found one to purge conn = <Memory address>

編集2

PROFILERツールを使用してさらに試行錯誤した後。このブロックのおかげで、生きている記憶が絶えず増加していることを発見しました。

UISegmentedControl *segment = [[UISegmentedControl alloc] init];
segment.frame = CGRectMake(0, 0, 70, 32);
segment.selectedSegmentIndex = -1;
segment.segmentedControlStyle = UISegmentedControlStyleBar;
segment.tintColor = [UIColor colorWithRed:0.745 green:0.184 blue:0.216 alpha:1];
segment.momentary = YES;
segment.alpha = 0.9;
[segment insertSegmentWithTitle:@"Ta bort" atIndex:0 animated:NO];
[segment addTarget:self action:@selector(foo:) forControlEvents:UIControlEventValueChanged];

上記のブロックは、UISearchFieldに文字を入力するたびに実行されます。UISearchDisplayDelegateが-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString関数に対してYESを返しているため。これにより、UITableViewとそのセルが再描画されます。

この問題は、やや扱いやすくなりました。そして、私は現在、可能な修正を実装しています。

4

1 に答える 1

0

解決:

コードを移動

UISegmentedControl *segment = [[UISegmentedControl alloc] init];
segment.frame = CGRectMake(0, 0, 70, 32);
segment.selectedSegmentIndex = -1;
segment.segmentedControlStyle = UISegmentedControlStyleBar;
segment.tintColor = [UIColor colorWithRed:0.745 green:0.184 blue:0.216 alpha:1];
segment.momentary = YES;
segment.alpha = 0.9;
[segment insertSegmentWithTitle:@"Ta bort" atIndex:0 animated:NO];
[segment addTarget:self action:@selector(foo:) forControlEvents:UIControlEventValueChanged];

テーブルビューの実際の再描画の外側。

于 2012-10-17T11:13:26.120 に答える