为什么我会收到此错误?无法识别的选择器发送到实例

时间:2012-12-03 10:15:50

标签: objective-c ios selector

  

可能重复:
  I want highlight text on UIWebView

我在调用-[UIWebView highlightAllOccurencesOfString:]时收到错误“无法识别的选择器发送到实例0x756cef0”。选择器在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

任何想法?

2 个答案:

答案 0 :(得分:2)

此问题是由于您将WBHighlight电话分机连接到UIWebView

WBHighlight可能是一个子类UIWebView,其中声明并定义了highlightAllOccurencesOfString:方法。此方法在标准UIWebView中不存在,这就是为什么它会抛出如下错误:无法识别的选择器发送到实例

您需要在界面构建器中将UIWebView的类更改为WBHighlight

  1. 转到身份检查员
  2. 选择您的WebView
  3. 将UIWebView的类更改为WBHighlight
  4. Class change in identity inspector

答案 1 :(得分:0)

Hekiru,你需要制作WBHighlight的对象才能调用该方法。而且,为此您需要导入该类并创建对象。

让我们说,

WBHighlight *objWBHighlight = [WBHighlight new];

//Then, call that required method:

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

希望,它能解决你的问题。试试吧。

如有任何疑虑,请告诉我。 :)