사용자 클래스를 내 클래스에 추가했는데 prepareForSegue : 메서드 중에 대리자를 설정하려고하면 컴파일러 경고가 표시됩니다. 내가 얻는 경고는 ...사용자 지정 프로토콜에 대한 위임을 설정하는 경고가 발생합니다.
Sending 'MyCustomViewControllerClass *const __strong' to parameter of incompatible type 'id<NSFileManagerDelegate>'
프로젝트가 빌드되어 실행되고 모든 것이 경고에서 마이너스 경고를 뺀다. 내 맞춤 클래스에 <NSFileManagerDelegate>
을 추가하면 경고가 사라집니다. 내가 누락 된 것이 있거나 Xcode (6 베타)의 버그입니까? 코드가
SomeSecondClass.h
#import <UIKit/UIKit>
@class SomeSecondCustomViewController;
@protocol SomeSecondCustomViewControllerDelegate <NSObject>
- (void)doThisForMe
@end
@interface SomeSecondCustomViewController : UIViewController
@property (weak, nonatomic) id <SomeSecondCustomViewControllerDelegate> delegate;
@end
SomeSecondClass.m ... 프로토콜/대리자를 설정하지만 난 어쨌든 그것을 게시 할 예정 표준 코드입니다
@interface SomeSecondViewController()
…stuff
-(void)someMethod {
[self.delegate doThisForMe];
}
@end
CustomClass.h
#import <UIKit/UIKit.h>
#import “ SomeSecondViewController.h”
@interface MyCustomViewController : UIViewController <SomeSecondCustomViewControllerDelegate>
//adding on <NSFileManagerDelegate> removes the warning...
@end
CustomClass.h
...standard stuff...
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"MySegue"]) {
//this is where the warning happens on "self"
[segue.destinationViewController setDelegate:self];
}
}
- (void)doThisForMe {
//doing some stuff...
}
@end
경고가 존재하지 않는 이전 프로젝트가 열렸으며 동일한 경고가 나타납니다. 이 Xcode 문제가 궁금해?
그냥 감추고있는 사람을 위해, 이것은 Swift 호환성을위한 Xcode 6의 컴파일러 변경입니다. 앞으로 나아갈 Swift는 델리게이트 설정을위한 "유형"을 기대합니다. 이것은 위에서 언급 한 것처럼 캐스팅과 동일합니다. 내 생각에 경고가 Xcode 6에서만 발생하는 이유가 여기에 있습니다. – DoS