HTMLにiframeが埋め込まれていると

  • webViewDidFinishLoad:
  • webView:didFailLoadWithError:

が複数回呼ばれます。よって母体となるページの完了を単純に上記のメソッドが呼ばれたタイミングで判断することはできません。

一番簡単な対処法はUIWebView#loadingを参照することです。母体となるページの読み込みが完了していない間は、loadingはYESになります。以下のようにするとよいでしょう。

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    // iframeの読み込み完了は無視
    if (webView.loading) return;

    〜〜読み込み成功時の処理〜〜
}

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
    // iframeの読み込み失敗は無視
    if (webView.loading) return;

    〜〜読み込み失敗時の処理〜〜
}