Во всем моем приложении я получаю предупреждения о семантических проблемах, когда устанавливаю ViewController.delegate = self
. Я искал и нашел похожие сообщения, но ни один из них не смог решить мою проблему.
ViewController.m:
GameAddViewController *gameAddViewContoller = [[navigationController viewControllers] objectAtIndex:0];
gameAddViewContoller.delegate=self;
Я получаю сообщение об ошибке при настройке .delegate=self
.
GameAddViewController.h:
@protocol GameAddViewControllerDelegate <NSObject>
- (void)gameAddViewControllerDidCancel:(GameAddViewController *)controller;
- (void)gameAddViewController:(GameAddViewController *)controller didAddGame:(Game *) game;
@end
@interface GameAddViewController : UITableViewController <GameAddViewControllerDelegate>
{
sqlite3 *pitchcountDB;
NSString *dbPath;
}
@property (nonatomic, strong) id <GameAddViewControllerDelegate> delegate;
...
@end
ViewController.h:
#import "GameAddViewController.h"
@class ViewController;
@protocol ViewControllerDelegate <NSObject>
- (void)ViewControllerDidCancel:(ViewController *)controller;
@end
@interface ViewController : UIViewController <ViewControllerDelegate>
-(void) checkAndCreateFile;
@end
Может ли кто-нибудь указать мне правильное направление для устранения предупреждающих сообщений?
ios
objective-c
delegates
Дэвид Л
источник
источник
ViewController
кGameAddViewControllerDelegate
делегату.Для меня в конечном итоге произошло то, что я не добавлял делегата к @interface в моем файле заголовка.
Например
@interface TheNameOfYourClass : UIViewController <TheDelegatorClassDelegate> @end
источник
Вы помещаете <GameAddViewControllerDelegate> не в то место. Это происходит не на GameAddViewController, а на ViewController.
источник
Это может помочь другим людям, которые добавляют многопользовательское соединение прямо в ViewController. Вверху myViewControllerName.h добавьте «<MCSessionDelegate>»:
@interface myViewControllerName : UIViewController<MCSessionDelegate>
источник
также, если вы определяете своего делегата на xx.m, но используете его в другом классе. у вас может возникнуть эта проблема. так что просто поместите определение протокола на xx.h, когда это необходимо.
источник
Если у вас гибридный проект, протокол в Swift и задание в Objective-C:
Быстрое объявление:
Назначение Objective-C:
@property (nonatomic) id<BackgroundTasking> backgroundTasker; _backgroundTasker = [[BackgroundTasker alloc] init]; // WARNING
Назначение '__strong id' из несовместимого типа 'BackgroundTasker *'
Вам необходимо объявить класс (чтобы удалить это предупреждение) и функции (чтобы сделать их доступными) как @objc, чтобы они правильно соединялись.
Правильная декларация Swift:
источник
В гибридных проектах вы должны добавлять своих делегатов в файл .h вместо файла .m
источник