2009-03-13 15 views
0

以下のメソッドを終了した後、EXC_BAD _ACCESSが表示されます。その時点で、htmlDocumentは無効になります。これはスコープから外れるためです。しかし、なぜ私はエラーが発生しているのですか? contentView(UIWebView)が読み込まれるまでに、htmlDocumentはなくなりました。しかし、contentViewはloadHTMLStringから必要なものをすでに持っていませんか?これはEXC_BAD_ACCESSの原因ですか?

- (void)viewDidLoad { 
[super viewDidLoad]; 
//something other processing here 

NSString *htmlDocument = [NSString stringWithFormat:@"<html> \n" 
"<body>%@</body> \n" 
"</html>", aboutContent]; 
[contentView loadHTMLString:htmlDocument baseURL:[NSURL URLWithString:@"http://www.abc.com"]]; 

}

はこの失敗にすべての道をたどるためのより良い方法はありますか?このメソッドを残すと、自分のコードの行の最後になります。そこからのSDKのもの。

答えて

1

「aboutContent」がオブジェクトへの有効なポインタであると仮定すると、このコードには何も問題はないと言えます。

+0

アドレスを持つので、有効なポインタです。ラインの下の何かが崩壊する。しかし、私はその時点で関与していません。このエラーは通常、メモリの問題に関連しています。私は間違いなく何とかそれを引き起こした。 – 4thSpace

1

あなたのアプリをGuardMallocでシミュレータで実行しようとすることはできますが、それは何かを立てることが保証されていません。私はあなたがエラーを引き起こしているものを見つけるまで、文をコメントアウトしてみることをお勧めします。

1

文脈なしで提供したばかりのコードスニペットでは何が起こっているのかはっきりしません。つまり、デバイスにローカルにHTMLをロードするだけでいいと思う。なぜこれをしないのですか?

この技術を使用して
- (void)viewDidLoad { 
    [webView loadRequest:[NSURLRequest 
          requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] 
               pathForResource:@"help/about.html" 
               ofType:@"html"]isDirectory:NO]]]; 
} 

、ユーザーが、彼らが実際にWeb表示を見ているという事実のために賢明されることなく、右お使いの携帯電話にHTMLベースの文書を作成できます。これには、JavaScript、CSS、全体のボールを含んでいますワックス。私は人々が実際に自分のiPhoneアプリを実際にインターネット上に出て静かなページをインターネット上にレンダリングするだけで本当に必要ないことを見てきました。

1

2番目の投稿のサンプルコードから、UIBarButtonItem *buttonをリリースしたボタンは、コメントアウトしたリリースに保持されないため、割り当てが解除されます。

あなたはそれを解放することができますそれは、次に表示しするために(adSubviewを使用して)別のビューにボタンを追加する必要があります。親ビューはボタンを保持します。

もちろん、ボタンをもう一度参照する場合は、ビューコントローラーは保持したままにして、そのボタンを解除します。

2

2番目の投稿から、コメントアウトした行([ボタンのリリース])は、すでにリリースされているとマークされたオブジェクトを自動的に解放します。

ボタンのallocを実行しているところで "autorelease"を削除するか、コードがエラーと例外なしでコンパイルされるように[button release]ステートメントを削除します。

オブジェクトが自動解放用にマークされている場合、そのリリースを呼び出すことは、解放されたインスタンス上でリリースを呼び出すことと同じになるため、エラーになります。

関連する問題