Während meiner App erhalte ich beim Festlegen Warnungen vor semantischen Problemen ViewController.delegate = self
. Ich habe ähnliche Beiträge gesucht und gefunden, aber keiner konnte mein Problem lösen.
ViewController.m:
GameAddViewController *gameAddViewContoller = [[navigationController viewControllers] objectAtIndex:0];
gameAddViewContoller.delegate=self;
Ich erhalte die Fehlermeldung beim Einstellen .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
Kann mich jemand in die richtige Richtung weisen, um die Warnmeldungen zu beheben?
ios
objective-c
delegates
David L.
quelle
quelle
ViewController
an denGameAddViewControllerDelegate
Delegierten an.Für mich war es am Ende so, dass ich den Delegaten nicht zur @ Schnittstelle in meiner Header-Datei hinzugefügt habe
Zum Beispiel
@interface TheNameOfYourClass : UIViewController <TheDelegatorClassDelegate> @end
quelle
Sie platzieren das <GameAddViewControllerDelegate> an der falschen Stelle. Es geht nicht auf GameAddViewController, sondern auf ViewController.
quelle
Dies kann anderen Personen helfen, die Multipeer Connectivity direkt zu einem ViewController hinzufügen. Fügen Sie oben in myViewControllerName.h '<MCSessionDelegate>' hinzu:
@interface myViewControllerName : UIViewController<MCSessionDelegate>
quelle
auch, wenn Sie Ihren Delegaten auf xx.m definieren, ihn aber in einer anderen Klasse verwenden. Sie können dieses Problem bekommen. Setzen Sie also einfach das Protokoll define auf xx.h, wenn es benötigt wird.
quelle
Wenn Sie ein Hybridprojekt haben, das Protokoll in Swift und die Zuweisung in Objective-C:
Schnelle Erklärung:
Ziel-C-Aufgabe:
@property (nonatomic) id<BackgroundTasking> backgroundTasker; _backgroundTasker = [[BackgroundTasker alloc] init]; // WARNING
Zuweisen zu '__strong id' vom inkompatiblen Typ 'BackgroundTasker *'
Sie müssen die Klasse (um diese Warnung zu entfernen) und die Funktionen (um sie zugänglich zu machen) als @objc deklarieren, damit sie korrekt überbrückt werden.
Richtige Swift-Erklärung:
quelle
Bei Hybridprojekten sollten Sie Ihre Delegaten in der .h-Datei anstelle der .m-Datei hinzufügen
quelle