2010-09-14 45 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

相关问题