Po ustawieniu w mojej aplikacji otrzymuję semantyczne ostrzeżenia o problemach ViewController.delegate = self
. Szukałem i znalazłem podobne posty, ale żaden nie był w stanie rozwiązać mojego problemu.
ViewController.m:
GameAddViewController *gameAddViewContoller = [[navigationController viewControllers] objectAtIndex:0];
gameAddViewContoller.delegate=self;
Otrzymuję komunikat o błędzie podczas ustawiania .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
Czy ktoś może wskazać mi właściwy kierunek rozwiązywania komunikatów ostrzegawczych?
ios
objective-c
delegates
David L.
źródło
źródło
ViewController
zGameAddViewControllerDelegate
delegatem.Skończyło się na tym, że nie dodałem delegata do @interface w moim pliku nagłówkowym
Na przykład
@interface TheNameOfYourClass : UIViewController <TheDelegatorClassDelegate> @end
źródło
Umieszczasz <GameAddViewControllerDelegate> w niewłaściwym miejscu. Nie trafia na GameAddViewController, ale na ViewController.
źródło
Może to pomóc innym osobom, które dodają łączność Multipeer bezpośrednio do ViewController. W górnej części myViewControllerName.h dodaj „<MCSessionDelegate>”:
@interface myViewControllerName : UIViewController<MCSessionDelegate>
źródło
również, jeśli zdefiniujesz swojego delegata na xx.m, ale używasz go w innej klasie. możesz mieć ten problem. więc po prostu umieść definicję protokołu w xx.h, kiedy jest to potrzebne.
źródło
Jeśli masz projekt hybrydowy, protokół w Swift i przypisanie w Objective-C:
Szybka deklaracja:
Zadanie w ramach celu C:
@property (nonatomic) id<BackgroundTasking> backgroundTasker; _backgroundTasker = [[BackgroundTasker alloc] init]; // WARNING
Przypisywanie do „__strong id” z niezgodnego typu „BackgroundTasker *”
Musisz zadeklarować klasę (aby usunąć to ostrzeżenie) i funkcje (aby były dostępne) jako @objc, aby zostały poprawnie zmostkowane.
Prawidłowa deklaracja Swift:
źródło
W projektach hybrydowych powinieneś dodać swoich delegatów do pliku .h zamiast pliku .m
źródło