receiver type *** (인스턴스 메시지)는 전달 선언입니다.
에는 iOS5가 .NSObject
States
,,, class class, class class class class class class class class class class class class.
states = [states init];
있다init
in the method in the method in 。States
:
- (id) init
{
if ((self = [super init]))
{
pickedGlasses = 0;
}
return self;
}
.states = [states init];
인스턴스 메시지의 수신기 유형 "States"는 전달 선언입니다.
그것은 무엇을 뜻하나요?내가 뭘 잘못하고 있지?
이는 기본적으로 상태 선언을 포함하는 .h 파일을 Import해야 함을 의미합니다.
하지만 당신의 코드에는 다른 많은 문제가 있습니다.
- -init가 없는
+alloc
안 돼 안 돼 - 개체를 포인터가 아닌 유형으로 선언하고 있습니다. 이 유형도 작동하지 않습니다.
- 하는 게
[super init]
-init
. - 하다를 사용해서
@class
수입하다
WWIW, 기존 프로젝트에 핵심 데이터를 구현하고 있을 때 이 오류가 발생했습니다.알고 보니 CoreData.h를 프로젝트에 링크하는 것을 잊었습니다.이미 CoreData 프레임워크를 프로젝트에 추가했지만 Apple의 템플릿과 마찬가지로 미리 컴파일된 헤더의 프레임워크에 링크하여 문제를 해결했습니다.
#import <Availability.h>
#ifndef __IPHONE_5_0
#warning "This project uses features only available in iOS SDK 5.0 and later."
#endif
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
#endif
서로 의존하는 파일이 두 개 있을 때 이런 메시지를 받았어요.여기서 어려운 것은 서로 Import만 하면 순환 참조가 된다는 것입니다(클래스 A는 클래스 B를, 클래스 B는 클래스 A를 Import합니다).으로 (앞으로 예요.@class A
클래스 중 하나의 (클래스 B) 헤더 파일에 선언이 있습니다. BA 의 를 , 「A의 ivar 를 하는 것만으로, 이 에러가합니다.#import "A.h"
BILLY.M.M.M.E.M.D.E.E.M.E.E.M.D.E.E.E.M.E.E.E.E.M.E.D.E
는 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★@class "Myclass.h"
.
했을 때#import "Myclass.h"
됐어요 잘 됐어요.
목표 C에서 Swift 클래스 또는 메서드를 사용하려고 할 때 이 오류가 발생하는 경우: Apple이 다음 다이어그램에서 정의한 2단계 중 하나를 잊어버린 것입니다.
예:
.Test.m
삭제:
클래스 메시지에 대한 수신기 'MyClass'가 전진 선언입니다.
Obj-C 파일:
1: 「」1: 「」을 합니다.Test.h
@class MyClass;
2: 2: 검색*-Swift.h
파일 이름(Objective-C 생성 인터페이스 헤더 이름 검색).이름은 다음과 같습니다.MyModule-Swift.h
3: 「 」3: 「 」를 합니다.Test.m
의 헤더를 합니다.
#import <MyModule/MyModule-Swift.h>
Swift 파일:
- 확신해주다
MyClass
(또는 베이스 클래스) 상속NSObject
학급. - 확신해주다
@objc
Obj-C에서 콜하는 각 메서드 앞에 있습니다. - 또한 (파일 인스펙터의) Target Membership 섹션도 체크합니다.
사용하고 있습니다.
States states;
사용해야 할 곳
States *states;
초기화 방법은 다음과 같습니다.
-(id)init {
if( (self = [super init]) ) {
pickedGlasses = 0;
}
return self;
}
마지막으로 States 클래스의 개체를 만들 때는 다음과 같이 해야 합니다.
State *states = [[States alloc] init];
나는 이것이 이것을 하는 가장 좋은 방법이라고 말하는 것이 아니다.그러나 개체를 초기화하는 가장 기본적인 사용법을 이해하는 데 도움이 될 수 있습니다.
이 오류를 발생시키는 클래스의 헤더 파일을 가져왔는지 확인합니다.
유닛 메서드의 프로토타입이 .h 파일에 있는지 확인합니다.
파일에서 정의한 것보다 더 높은 위치에 메서드를 호출하기 때문에 이 메시지가 표시됩니다.또는 발신자가 호출하는 메서드보다 파일 내의 발신자가 적어지도록 메서드를 재정렬할 수도 있습니다.
선언 및/또는 Import에 문제가 있음을 나타내는 두 가지 관련 오류 메시지가 있습니다.
첫 번째는 .m(또는 .pch 파일)에 #import를 넣지 않고 .h에 @class를 선언함으로써 생성됩니다.
두 번째는 States 클래스에 다음과 같은 메서드가 있는 경우입니다.
- (void)logout:(NSTimer *)timer
#import를 추가하면 다음과 같습니다.
"States"에 대해 표시되는 @interface가 없습니다.실렉터가 'logout:'로 선언됩니다.
이 경우 Import 또는 전달하려는 클래스의 .h 파일에서 (이 경우) "로그아웃" 메서드를 선언했는지 확인해야 합니다.
따라서 고객님의 경우 다음 사항이 필요합니다.
- (void)logout:(NSTimer *)timer;
[ States ]클래스의 .h에서 이러한 관련 에러 중 하나 또는 양쪽을 소거합니다.
언급URL : https://stackoverflow.com/questions/8815200/receiver-type-for-instance-message-is-a-forward-declaration
'source' 카테고리의 다른 글
WPF 페이지에서 네비게이션바를 숨기는 방법 (0) | 2023.04.15 |
---|---|
Bash를 사용하여 변수에 현재 디렉토리를 저장하시겠습니까? (0) | 2023.04.15 |
Postgresql GROUP_CONCAT 등가물? (0) | 2023.04.15 |
Swift에서 어레이의 처음 5개 개체를 반환하는 방법 (0) | 2023.04.15 |
이름 "XYZ"가 네임스페이스 "clr-namespace"에 없습니다.ABC" (0) | 2023.04.15 |