2010-09-14 110 views
0

這個代碼是從樣品中 部分.H:iPhone SDK:[錯誤]找不到協議聲明 「NSNetServiceDelegate」

@interface ViewController : UITableViewController <NSNetServiceBrowserDelegate> { 
     NSMutableArray * tableData; 
     NSNetServiceBrowser * _browser; 
     NSMutableArray * _foundServices; 

     NSURLConnection * _connection; 
     NSInputStream * _consumerStream; 
     NSString * controllerHostName; 
} 
@property (nonatomic, retain) NSMutableArray * tableData; 
@property (nonatomic, retain) NSNetServiceBrowser * _browser; 
@property (nonatomic, retain) NSMutableArray * _foundServices; 
@property (nonatomic, retain) NSURLConnection * connection; 
@property (nonatomic, retain) NSInputStream * consumerStream; 
@property (nonatomic, retain) NSString * controllerHostName; 

在.M部分

#import "ViewController.h" 
    #include <sys/socket.h> 
    #include <netinet/in.h> 
    #include <unistd.h> 
    #include <CFNetwork/CFNetwork.h> 

    @synthesize tableData; 
    @synthesize _browser; 
    @synthesize _foundServices; 
    @synthesize consumerStream = _consumerStream; 
    @synthesize connection = _connection; 
    @synthesize controllerHostName; 

    - (void)viewWillAppear:(BOOL)animated { 
      [super viewWillAppear:animated]; 

      _browser = [[NSNetServiceBrowser alloc] init]; 
      [_browser setDelegate:self]; 
      [_browser searchForServicesOfType:@"_service._tcp" inDomain:@""]; 
      [super viewWillAppear:animated]; 
    } 


    - (void)viewWillDisappear:(BOOL)animated { 
      [super viewWillDisappear:animated]; 

      [_browser stop]; 
      _browser.delegate = nil; 
      [_browser release]; 
      _browser = nil; 

      [_foundServices removeAllObjects]; 
    } 
    - (void)netServiceBrowser:(NSNetServiceBrowser *)netServiceBrowser didFindService:(NSNetService *)netService moreComing:(BOOL)moreServicesComing 
    { 
      self.controllerHostName = [NSString stringWithFormat:@"%@.%@", netService.name, netService.domain]; 
      NSLog(@"ControllerHost String is: %@", self.controllerHostName); 
      NSLog(@"URL to use is === %@.%@", netService.name, netService.domain); 
      if (!_foundServices) { 
        _foundServices = [[NSMutableArray alloc] init]; 
      } 

      [_foundServices addObject:netService]; 

      [self.tableView reloadData]; 
    } 

    - (void)netServiceBrowser:(NSNetServiceBrowser *)netServiceBrowser didRemoveService:(NSNetService *)netService moreComing:(BOOL)moreServicesComing 
    { 
      [_foundServices removeObject:netService]; 
    } 

    - (void)netServiceBrowserDidStopSearch:(NSNetServiceBrowser *)aNetServiceBrowser 
    { 

     [_foundServices removeAllObjects]; 
} 

我聲明所有標題爲樣本 但我收到錯誤消息「無法找到協議聲明」NSNetServiceDelegate「 in .h

interface ViewController : UITableViewController <NSNetServiceBrowserDelegate> 

那麼我錯過了什麼聲明? 該示例沒有任何警告或錯誤

回答

1

問題是一個未使用的函數。剛剛刪除:

[self.tableView reloadData]; 

它會好的!

1

我認爲它是在「NSNetServices.h」中定義的嗎?

+0

這很奇怪...蘋果引用庫裏說:聲明在 NSNetServices.h,但我不能包括或導入它... – 2010-09-14 06:52:18

1

添加到您的標題:

#import <Foundation/NSNetServices.h> 

我得到這個從BonjourWeb蘋果的示例代碼項目。

+0

仍然錯誤,但我刪除 2010-09-14 07:00:50

+0

如果你是說你刪除''部分,但仍然出現編譯錯誤,那麼要麼不保存文件,要麼在代碼中的其他地方引用'NSNetServiceBrowserDelegate'。 – 2010-09-14 07:09:49

+0

哦,我的意思是,當我刪除,沒關係沒有錯誤,但它不會找到任何服務或返回任何日誌(即使找不到) – 2010-09-14 07:13:44

0

我發現類似的答案,只是刪除

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    [_browser stop]; 
    _browser.delegate = nil; 
    [_browser release]; 
    _browser = nil; 

    [_foundServices removeAllObjects]; 
} 

該計劃將得到Netservice我想...... 爲什麼?

+0

我可以看到控制檯結果:找到服務本地。 _envoservice._tcp。 envo_eeepc envoControllerHost字符串是:envo_eeepc.local 要使用的URL是=== envo_eeepc.local。 ControllerHostName是envo_eeepc.local.but模擬器崩潰立即???????????? – 2010-09-14 10:44:52

+0

要發佈更多信息,編輯您的問題並將其添加到那裏,而不是發佈答案。 – 2010-09-14 17:00:23

相關問題