1
votes

these 2 are the files where i m creating a protocol and then declare the delegate in another class

this is my favouriteViewController.h

#import <UIKit/UIKit.h>
#import <CoreData/CoreData.h>
#import "ViewController.h"

@class FavouritesTableViewController;

@protocol FavouritesTableViewControllerDelegate<NSObject>

- (void)senDetailsViewController:(FavouritesTableViewController *)controller didFinishEnteringItem:(NSArray *)item;

@end

@interface FavouritesTableViewController : UITableViewController <UISearchControllerDelegate,UISearchBarDelegate>
@property (strong, nonatomic) IBOutlet UISearchController *search;
@property (strong, nonatomic) IBOutlet UITableView *table;
@property (nonatomic, weak) id < FavouritesTableViewControllerDelegate > delegate;
@end

and this is my viewController.h

#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>
#import "FavouritesTableViewController.h"

@interface ViewController : UIViewController <CLLocationManagerDelegate,FavouritesTableViewControllerDelegate>

@property (weak, nonatomic) IBOutlet UIImageView *weatherIcon;
@property (weak, nonatomic) IBOutlet UILabel *Place;
@property (weak, nonatomic) IBOutlet UILabel *Temperature;
@property (weak, nonatomic) IBOutlet UILabel *unit;
@property (weak, nonatomic) IBOutlet UILabel *weatherText;
@property (weak, nonatomic) IBOutlet UITextView *Info;
@property (weak, nonatomic) IBOutlet UILabel *summary;

@property (strong,nonatomic) NSString *longitude;
@property (strong,nonatomic) NSString *latitude;
@property (strong,nonatomic) NSString *locationName;
@property BOOL setLocation;

@property (weak, nonatomic) IBOutlet UIScrollView *scroll;

- (IBAction)forecast:(UIButton *)sender;
- (IBAction)Share:(UIButton *)sender;
- (IBAction)history:(UIButton *)sender;
@property (weak, nonatomic) IBOutlet UIActivityIndicatorView *activIndicator;

- (IBAction)favbutton:(id)sender;

@end

the error i get is

:- Cannot find protocol declaration for 'FavouritesTableViewControllerDelegate'

I'm declaring these methods and protocols to pass data from FavouriteViewController to ViewController

and this is the protocol method which i call in ViewController.m

-(void)senDetailsViewController:(FavouritesTableViewController *)controller didFinishEnteringItem:(NSArray *)item
{
    controller.delegate = self;
    self.latitude = [item[0] valueForKey:@"lat"];
    self.longitude = [item[0] valueForKey:@"long"];
    self.locationName = [item[0] valueForKey:@"name"];
    self.setLocation = YES;
    [self viewDidLoad];
}
1
It seems that you declared it in favouriteViewController.h but included another FavouritesTableViewController.h - Jean-Baptiste Yunès
Refer this - Here Seems like a similar problem. - Pulkit Sharma
@PulkitSharma nope i have seeen that post its not the problem i am facing thanks - Shravan

1 Answers

2
votes

Ths is happening because of recursive import, in FavouritesTableViewController you are importing "ViewController.h" and again ViewController.h you are importing "FavouritesTableViewController.h"

try

@class viewController;
@class FavouritesTableViewController;

in FavouritesTableViewController.h and remove "#import ViewController.h"