2010-09-14 3 views
0

ce code est d'un échantillon en partie .h:SDK iPhone: [error] Vous ne trouvez pas la déclaration de protocole pour "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; 

dans la partie .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]; 
} 

déclaration I tout l'en-tête comme l'échantillon fait Mais j'ai reçu le message d'erreur "Impossible de trouver la déclaration de protocole pour" NSNetServiceDelegate " dans .h

interface ViewController : UITableViewController <NSNetServiceBrowserDelegate> 

Ai-je manqué quelque chose à déclarer? L'échantillon n'a aucun avertissement ou erreur

Répondre

1

Le problème est une fonction inutilisée. Il suffit de supprimer:

[self.tableView reloadData]; 

Ce sera bien!

1

Je pensais que c'est défini dans "NSNetServices.h" à la place?

+0

C'est bizarre ... les références de pommes libary dit: Déclaré En NSNetServices.h, mais je ne peux pas inclure ou l'importer ... –

1

Ajouter à votre tête:

#import <Foundation/NSNetServices.h> 

J'ai eu ce du projet de code exemple d'Apple BonjourWeb.

+0

encore erreur, mais je supprimer

+0

Si vous dites que vous avez supprimé la partie '' mais toujours l'erreur de compilation, soit vous n'avez pas sauvegardé le fichier, soit vous faites référence à 'NSNetServiceBrowserDelegate' ailleurs dans votre code. –

+0

Oh, je veux dire quand je supprime , il n'y a pas d'erreur, mais il ne trouvera aucun service ou ne retournera aucun log (même il ne peut pas trouver) –

0

J'ai trouvé quelque chose comme réponse, enlèverait juste

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

    [_foundServices removeAllObjects]; 
} 

Le programme se Netservice Je veux ... POURQUOI?

+0

Je peux voir le résultat de la console: service trouvé local. _envoservice._tcp. envo_eeepc La chaîne envoControllerHost est: envo_eeepc.local L'URL à utiliser est === envo_eeepc.local. ControllerHostName EST envo_eeepc.local.but simulator crash Immédiatement ???????????? –

+0

Pour poster plus d'informations, éditez votre question et ajoutez-y, au lieu de poster une réponse. –

Questions connexes