我在调用-[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
任何想法?
答案 0 :(得分:2)
此问题是由于您将WBHighlight
电话分机连接到UIWebView
。
WBHighlight
可能是一个子类UIWebView
,其中声明并定义了highlightAllOccurencesOfString:
方法。此方法在标准UIWebView
中不存在,这就是为什么它会抛出如下错误:无法识别的选择器发送到实例。
您需要在界面构建器中将UIWebView
的类更改为WBHighlight
。
WBHighlight
答案 1 :(得分:0)
Hekiru,你需要制作WBHighlight的对象才能调用该方法。而且,为此您需要导入该类并创建对象。
让我们说,
WBHighlight *objWBHighlight = [WBHighlight new];
//Then, call that required method:
int someVarToAssign = [objWBHighlight highlightAllOccurencesOfString:@"fsfsf"];
希望,它能解决你的问题。试试吧。
如有任何疑虑,请告诉我。 :)