2009-06-30 5 views
1

아이폰 앱으로 수백만 달러를 벌어들이는 큰 꿈을 가지고 Objective-C를 배우려는 또 다른 C# /. NET 녀석 :)MyObject가 '-Foo'메시지에 응답하지 않을 수 있습니다. (Noob) 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 배경에서 왔기 때문에 내 사고가 근본적으로 결함이있을 수 있습니다. 누군가 올바른 방향으로 나를 가리킬 수 있다면 크게 감사하겠습니다.

EDIT : 내 원본 코드에는 캐스트에 별표가 있습니다 (컴파일 오류가 표시되지 않음).

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

누락 된 * 문제이다 : 그것은 아직도하지만 ...

답변

1

다른 답변에 설명에 별표를 포함 시키면 별표가 포함되어 있으므로 경고를 표시해서는 안됩니다. 사실 캐스트는 불필요하다고 생각합니다. 캐스트가없는 버전에서도 경고하지 않아야합니다.

메서드를 호출하려는 파일의 시작 부분에 MyObject.h가 #imported되어 있는지 확인하십시오. 당신이받는 경고는 @class MyObject이라는 클래스를 forward-declared하지만 #import "MyObject.h"이라는 헤더를 포함하지 않는 전형적인 경우입니다.

사실 Objective-C에서 Java는 대개 소문자로 메소드 이름을 시작합니다.

+0

그것은 작동하지 않습니다, 그것은 빌드하고 성공적으로 실행하지만, (XCode) 컴파일러에서 경고를 얻을. 나는 그것을 무시할 수 있었지만, 나는 잘못된 것을하고 있다는 느낌을 받는다. (메서드 이름 지정 관행에 대한 정보를 주셔서 감사합니다.) – BFree

+0

내 대답을 편집하여 'work'의 의미를 지정했습니다. :-) – harms

+0

두 번만 선택했는데 헤더 파일은 #import를 사용하여 맨 위에 포함되어 있습니다. (그것없이, 나는 심지어 그것을 만들게하지 않는 컴파일 시간 오류를 얻는다). 나는 아직도 경고를 얻는다. (나는 이런 멍청한 놈 같아 !!) 도움 주셔서 감사합니다. – BFree

1

변경하여 주조 라인에 경고를 표시합니다.

+0

사실 내 질문에 오타가있었습니다. 내 실수. 내 코드 *에 별표가 있지만 경고 메시지가 계속 나타납니다. – BFree

+0

배열 처리를하고있는 파일에서 #import "MyObject.h"를 확인하십시오. –

1

좋아요, 지금 당황 스럽네요. (헤더 파일에 메서드 선언을 추가하는 것을 잊어 버렸습니다. 여러분 모두 내가 헤더 파일을 가져올 필요가 있다는 것을 강조하고 있다는 사실, 나는이 사실을 깨닫게했다. 너희 둘 모두를 도와 줘서 고마워.

관련 문제