문제

또 다른 C#/. Net Guy는 iPhone 앱으로 수백만을 만들려는 큰 꿈으로 Objective-C를 배우려고 노력합니다 :)

좋아, 나는이 질문이 제가 정적 유형 언어에 익숙해 졌기 때문에 조정하는 데 어려움을 겪고 있지만 여기 내 문제가 있습니다. myobect라는 수업이 있다고 가정 해 봅시다.

myobject.h

@interface MyObject : NSObject
{

}

-(void)Foo;

@end

myObject.m

#import "MyObject.h"
@implementation MyObject

-(void)Foo
{
  //do something fooey
}

@end

이제 나는이 객체들의 nsmutablearray를 엉망으로 만들려고 노력하고 있습니다. 그래서 나의 메인에서 나는이 객체들의 배열을 다음과 같이 채 웁니다.

NSMutableArray *array = [[NSMutableArray alloc] init];
for(int i = 0; i<10;i++)
{
   MyObject *obj = [[MyObject alloc]init];
   [array addObject:obj];
}

공상은 없습니다. 그러나 이제는 배열의 첫 번째를 꺼내고 Foo 메소드를 호출하려고했습니다. 그래서 여기 내가 혼란스러워하는 곳이 있습니다. 나는 이것을 시도했다 :

MyObject *obj = [array objectAtIndex:1];
[obj Foo];

그리고 이것이 효과가 있지만 myObject에 대한 경고를받습니다. 메시지에 응답하지 않을 수 있습니다.. 그래서, 나는 알았습니다.

MyObject *obj = (MyObject *)[array objectAtIndex:1];
[obj Foo];

그리고 그것은 또한 나에게 경고를줍니다.

내 질문은 컬렉션에 항목을 저장하는 방법과 객체의 유형을 유지하는 방법에 대한 근본적인 질문이라고 생각합니다. 다시 말하지만, 나는 .NET 배경에서 나옵니다. 아마도 내 생각은 근본적으로 결함이있을 수 있습니다. 그래서 누군가가 올바른 방향으로 나를 가리킬 수 있다면, 나는 그것을 크게 감사합니다.

편집하다: 내 원래 코드는 실제로 캐스트에 별표가 있습니다 (그것 없이는 컴파일 오류가 발생합니다). 그래도 경고를 보여줍니다 ...

도움이 되었습니까?

해결책

다른 답변에 대한 의견에 설명대로 별표를 포함한다는 점을 감안할 때 경고를하지 않아야합니다. 사실, 캐스트가 불필요하다고 생각합니다. 캐스트가없는 버전조차도 경고를하지 않아야합니다.

헤더 파일 MyObject.h가 메소드를 호출하려는 파일의 시작 부분에서 #IMPORTED인지 확인하십시오. 당신이 얻는 경고는 당신이 수업을 선언 한 사례의 전형적인 것입니다. @class MyObject 그러나 헤더를 포함하지 않았습니다 #import "MyObject.h".

BTW, Objective-C에서 일반적으로 Java와 같이 소문자로 메소드 이름을 시작합니다.

다른 팁

주조 선을 다음으로 변경하십시오.

MyObject *obj = (MyObject *)[array objectAtIndex:1];

잃어버린 * 문제입니다.

좋아, 나는 지금 총 바보 같은 느낌이 든다 :( 나는 메소드 선언을 헤더 파일에 추가하는 것을 잊었다. . 도와 주셔서 감사합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top