귀하의 문제는 컴파일러가 프로토콜에서 정의한 속성의 구현을 찾을 수 없다는 것입니다.
이런 이유로 프로토콜에 속성을 추가하는 대신 속성에 액세스하는 간단한 메서드와 설정하는 메서드를 정의하는 것이 좋습니다. 그러면 적절한 오류 메시지가 표시되고 도트 표기법을 사용할 수는 없지만 경고가 올바른 위치에 유지됩니다.
양자 택일로, 당신이 뭔가를 할 수있다 (하지만 교육적인 이유로 권장하지 않음) :
#import <objc/runtime.h>
@protocol myProto
@property (assign) int myProperty;
@end
@implementation NSObject(myProto)
-(int) myProperty
{
return [objc_getAssociatedObject(self, "myProperty") intValue];
}
-(void) setMyProperty:(int) myProperty
{
objc_setAssociatedObject(self, "myProperty", [NSNumber numberWithInt:myProperty], OBJC_ASSOCIATION_RETAIN);
}
@end
@interface MyObj : NSObject<myProto>
@end
@implementation MyObj
@dynamic myProperty;
@end
int main(int argc, char *argv[])
{
@autoreleasepool
{
MyObj *myObj = [MyObj new];
myObj.myProperty = 10;
NSLog(@"%i", myObj.myProperty);
}
}
당신은 게터/세터를 만드는'@의 synthesize'를 사용하지 않았습니다. (그리고 당신의 코드는'view' 속성에 접근하려고 시도하면 실패 할 것입니다.) UI는'view'를 찾을 수 없기 때문에 작동합니다. –
'view'의 이름을'theView'와 같은 것으로 변경하면 어떻게 될까요? – trojanfoe
나는 그것을 "view"라는 이름으로 지었다. 나는 다른 답을 써서 다음과 같이 설명했다 : – Kovasandra