0

お気に入りのポップオーバーとwebViewがあります。ポップオーバーのテーブルビューでセルを選択すると、WebビューはそのURLをロードする必要がありますが、SIGABRTまたはBAD_ACCESSが表示されます。

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

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
if (tableView == favoritesTable1) {
        UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
        textField.text = cell.textLabel.text;
        [web loadRequest:[[NSURLRequest alloc] initWithURL:[[NSURL alloc] initWithString:cell.textLabel.text]]];
        [cell release];
        [favoritesTable1 reloadData];
    }
}

私はこのようなものを手に入れたいのですが、完全に機能します:

サンプル画像

PS:ポップオーバーは、Webビューが設定されているのと同じクラスの新しいviewControllerです。

4

2 に答える 2

1

retainあなたはセルを持っていないので、そうすべきではありませんrelease... それはほぼ確実にあなたのクラッシュがどこから来ているかです.

また、autorelease なしで alloc/init を使用すると、メモリ リークが発生します。これを試して

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    if (tableView == favoritesTable1) {
        UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
        textField.text = cell.textLabel.text;
        [web loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:cell.textLabel.text]]];
        [favoritesTable1 reloadData];
    }
}
于 2012-04-18T13:00:41.587 に答える
0

NSURLRequest と NSURL の両方を alloc init で初期化します。どちらも保持されたオブジェクトを返します。メモリ管理のルールに従って適切に初期化してください。また、あなたがセルを解放していることもわかりました。あなたはそれを所有していないので、解放する必要はありません。この方法を試してください:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
if (tableView == favoritesTable1) {
        UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
        textField.text = cell.textLabel.text;
        NSURL *url = [[NSURL alloc] initWithString:cell.textLabel.text];
        NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
        [web loadRequest:request];
        [url release];
        [request release];
        [favoritesTable1 reloadData];
    }
}

ウェブ変数とは何ですか? また、問題を引き起こす可能性があります。

于 2012-04-18T12:59:54.213 に答える