2012-12-03 20 views
-2

可能重複:
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 

有什麼想法?

+0

,你改變了Web視圖對象類到'WBHighlight'? – tkanzakic

+0

否。在WBSecondViewController.xib文件中,Web視圖與WBSecondViewController.h連接。 – hekiru

+0

是的,沒關係,但你必須選擇網頁視圖,轉到身份檢查器(Cmd + Option + 3)並將'Class'屬性從'UIWebView'更改爲'WBHighlight',否則您將發送消息'highlightAllOccurencesOfString:'到'UIWebView'的實例,這個類不聲明這個方法 – tkanzakic

回答

2

此問題是由於您將WBHighlight插座連接到UIWebView

可能是WBHighlight是一個子類UIWebView其中highlightAllOccurencesOfString:方法被聲明和定義。此方法不存在於標準UIWebView中,這就是爲什麼它會拋出如下錯誤:發送到實例的無法識別的選擇器。

您需要在界面構建器中將UIWebView的類更改爲WBHighlight

  1. 轉到您的身份檢查
  2. 選擇您的WebView
  3. 改變類的UIWebView來WBHighlight

Class change in identity inspector

在您榫文件
+0

感謝您的回答。該程序無誤地工作。 – hekiru

+0

@hekiru:高興:) –

0

Hekiru,您需要創建WBHighlight的對象才能調用該方法。而且,爲此,您需要導入該類並創建對象。

讓說,

WBHighlight *objWBHighlight = [WBHighlight new]; 

//Then, call that required method: 

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

希望,它會按出你的problem.Try它。

無論如何讓我知道。 :)

+0

感謝您的回答。我試試。 – hekiru

相關問題