【问题标题】:Iphone SDK:[error]Cannot find protocol declaration for "NSNetServiceDelegate"Iphone SDK:[错误]找不到“NSNetServiceDelegate”的协议声明
【发布时间】:2010-09-14 06:14:57
【问题描述】:

此代码来自示例 在 .h 部分:

@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”的协议声明 在.h

interface ViewController : UITableViewController < NSNetServiceBrowserDelegate > 

那么我是否遗漏了任何要声明的内容? 该示例没有任何警告或错误

【问题讨论】:

    标签: iphone sdk


    【解决方案1】:

    我认为它是在“NSNetServices.h”中定义的?

    【讨论】:

    • 这很奇怪...苹果引用库说:在 NSNetServices.h 中声明,但我无法包含或导入它...
    【解决方案2】:

    将此添加到您的标题中:

    #import <Foundation/NSNetServices.h>
    

    我从BonjourWeb Apple 示例代码项目中得到这个。

    【讨论】:

    • 如果你说你删除了&lt; NSNetServiceBrowserDelegate &gt; 部分但仍然出现编译错误,那么要么你没有保存文件,要么你在代码中的其他地方引用了NSNetServiceBrowserDelegate
    • 哦,我的意思是当我删除 时,可以没有错误,但是它不会找到任何服务或返回任何日志(即使它找不到)
    • 与“缺少基本 SDK”有什么关系吗?我将 xcode 更新为 4.1,而不是缺少 sdk
    • 可能。安装 4.1 SDK 会删除 4.0 SDK,因此您需要更新项目的 Base SDK 构建设置。
    • 我已经这样做了...我无法选择“模拟器”>“调试”>缺少 SDK。但是如果我更改为“发布”>它会变成模拟器 - 3.2 |发布|.. .
    【解决方案3】:

    问题是一个未使用的函数。只需删除:

    [self.tableView reloadData];
    

    会好的!

    【讨论】:

      【解决方案4】:

      我找到了类似答案的东西,只需删除

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

      该程序将获得我想要的 Netservice... 为什么?

      【讨论】:

      • 我可以看到控制台结果:发现服务 本地。 _envoservice._tcp。 envo_eeepc envoControllerHost 字符串是:envo_eeepc.local 要使用的 URL 是 === envo_eeepc.local。 ControllerHostName IS envo_eeepc.local.but 模拟器立即崩溃 ?????????
      • 要发布更多信息,请编辑您的问题并将其添加到此处,而不是发布答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-20
      • 2015-12-18
      • 1970-01-01
      相关资源
      最近更新 更多