'id에 할당'호환되지 않는 유형'ViewController * const_strong '에서
내 앱 전체에서을 설정하면 의미 론적 문제 경고가 표시됩니다 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
누구든지 경고 메시지를 해결하기 위해 올바른 방향을 알려줄 수 있습니까?
이 줄에서 :
gameAddViewContoller.delegate=self;
self는 프로토콜을 ViewController
따르지 않는 유형 입니다 GameAddViewController
.
나에게 일어난 일은 헤더 파일의 @interface에 대리인을 추가하지 않았다는 것입니다.
예를 들면
@interface TheNameOfYourClass : UIViewController <TheDelegatorClassDelegate>
@end
<GameAddViewControllerDelegate>를 잘못된 위치에 놓았습니다. GameAddViewController로 이동하지 않고 ViewController로 이동합니다.
이것은 ViewController에 직접 Multipeer Connectivity를 추가하는 다른 사람들에게 도움이 될 수 있습니다. myViewControllerName.h 맨 위에 '<MCSessionDelegate>'를 추가합니다.
@interface myViewControllerName : UIViewController<MCSessionDelegate>
또한 xx.m에 대리자를 정의하지만 다른 클래스에서 사용하는 경우에도 마찬가지입니다. 이 문제가 발생할 수 있습니다. 따라서 필요할 때 프로토콜 정의를 xx.h에 넣으십시오.
하이브리드 프로젝트에서는 .m 파일 대신 .h 파일에 대리인을 추가해야합니다.
하이브리드 프로젝트가있는 경우 Swift의 프로토콜 및 Objective-C의 할당 :
신속한 선언 :
protocol BackgroundTasking {
func beginTask(withName: String, expirationHandler handler: (()->Void)?)
func endTask(withName: String)
}
Objective-C 할당 :
@property (nonatomic) id<BackgroundTasking> backgroundTasker;
_backgroundTasker = [[BackgroundTasker alloc] init]; // WARNING
호환되지 않는 유형 'BackgroundTasker *'에서 '__strong id'에 할당
클래스 (이 경고를 제거하기 위해)와 함수 (액세스 가능하게 만들기 위해)를 @objc 로 선언 해야 올바르게 브리지됩니다.
올바른 Swift 선언 :
@objc protocol BackgroundTasking {
@objc func beginTask(withName: String, expirationHandler handler: (()->Void)?)
@objc func endTask(withName: String)
}
'programing' 카테고리의 다른 글
emacs가 터미널 모드인지 어떻게 감지합니까? (0) | 2020.10.14 |
---|---|
특정 지역의 고객에게 서비스를 제공하는 데 가장 적합한 AWS 위치를 어떻게 결정할 수 있습니까? (0) | 2020.10.14 |
C # 속성은 실제로 메서드입니까? (0) | 2020.10.14 |
docker ubuntu / bin / sh : 1 : locale-gen : 찾을 수 없음 (0) | 2020.10.14 |
실행중인 PowerShell 스크립트에서 모든 환경 변수 표시 (0) | 2020.10.14 |