source

receiver type *** (인스턴스 메시지)는 전달 선언입니다.

manysource 2023. 4. 15. 09:04

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학급.
  • 확신해주다@objcObj-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