-2

重複の可能性:
UIWebViewでテキストを強調表示したい

を呼び出すと、「認識されないセレクターがインスタンス0x756cef0に送信されました」というエラーが発生します-[UIWebView highlightAllOccurencesOfString:]。セレクターはWBHighlight.hで宣言されており、WBSecondViewController.hで前方宣言を使用しています。

WBSecondViewController.h

@class WBHighlight;
#import <UIKit/UIKit.h>
@interface WBSecondViewController : UIViewController <UIWebViewDelegate, UIScrollViewDelegate>
@property (weak, nonatomic) IBOutlet WBHighlight *webView;
- (IBAction)searchButtonPressed:(id)sender;
- (IBAction)clearHighlights:(id)sender;
@end

WBSecondViewController.m

#import "WBSecondViewController.h"
#import "WBHighlight.h"
@interface WBSecondViewController ()
@end
@implementation WBSecondViewController
-(IBAction)searchButtonPressed:(id)sender{
    NSLog(@"highlighttes");
    [_webView highlightAllOccurencesOfString:@"cat"];
}

-(IBAction)clearHighlights:(id)sender{
    [_webView removeAllHighlights];
}

WBHighlight.h

#import <UIKit/UIKit.h>

@interface WBHighlight : UIWebView{
}
- (NSInteger)highlightAllOccurencesOfString:(NSString*)str;
- (void)removeAllHighlights;
@end

WBHighlight.m

#import "WBHighlight.h"
- (NSInteger)highlightAllOccurencesOfString:(NSString*)str
{
    NSString *path = [[NSBundle mainBundle] pathForResource:@"UIWebViewSearch" ofType:@"js"];
    NSString *jsCode = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
    [self stringByEvaluatingJavaScriptFromString:jsCode];

    NSString *startSearch = [NSString stringWithFormat:@"uiWebview_HighlightAllOccurencesOfString('%@')",str];
    [self stringByEvaluatingJavaScriptFromString:startSearch];

    NSString *result = [self stringByEvaluatingJavaScriptFromString:@"uiWebview_SearchResultCount"];
    return [result integerValue];
}

- (void)removeAllHighlights
{
    [self stringByEvaluatingJavaScriptFromString:@"uiWebview_RemoveAllHighlights()"];
}
@end

何か案が?

4

2 に答える 2

2

この問題は、WBHighlightコンセントを に接続したことが原因ですUIWebView

おそらく、メソッドが宣言および定義されてWBHighlightいるサブクラスです。このメソッドは standardには存在しないため、次のようなエラーがスローされます:認識されないセレクターがインスタンスに送信されましたUIWebViewhighlightAllOccurencesOfString:UIWebView

インターフェイスビルダーでのクラスUIWebViewをに変更する必要があります。WBHighlight

  1. ID インスペクタに移動します
  2. WebView を選択します
  3. UIWebView のクラスを次のように変更します。WBHighlight

ID インスペクタのクラス変更

于 2012-12-03T11:17:27.530 に答える
0

へきる、そのメソッドを呼び出すには、WBHighlightのオブジェクトを作成する必要があります。そして、このためには、そのクラスをインポートしてオブジェクトを作成する必要があります。

たとえば、

WBHighlight *objWBHighlight = [WBHighlight new];

//Then, call that required method:

int someVarToAssign = [objWBHighlight highlightAllOccurencesOfString:@"fsfsf"];

うまくいけば、それはあなたの問題を解決するでしょう。それを試してみてください。

どんな懸念でも私に知らせてください。:)

于 2012-12-03T10:26:03.287 に答える