2010-01-17 5 views
0

"인수 전달 ... 고유 한 Objective-C 유형 경고"에서 해독하는 데 문제가 있습니다. 나는, 말,있는 NSString 해당 상수를 할당하는 경우NSString "인수 전달 ... 고유 Objective-C 유형 경고"

NSString * const URL_1 = @"http://someurl"; 

다음과 같습니다 :

extern NSString * const URL_1; 

다음과 같이 정의 :

나는대로 상수 문자열 선언이

NSString *URL = nil; 
... 
URL = [[NSString alloc] initWithString:URL_1]; 

그리고이 NSString을 NSString이 필요한 함수의 인수로 전달하십시오.

ViewController *viewController = [[ViewController alloc] initWithURL:URL]; 

기능 서명 :

- (id)initWithURL:(NSString *)URL 

나는 내가 경고가 나타납니다 내가있는 NSString 객체가 알고있는 것처럼

" 'initWithURL'의 인수 하나를 전달하는 별개의 목표 - C 타입에서" 한 번 생성 된 불변, 나는 한 번 생성시 문자열에 값을 할당하므로 URL_1의 상수 특성이 문제를 야기하는지 이해할 수 없습니다.

나는 여기의 도넛 인 것을 확신하고, 무엇인가 단순한 것을 간과했다! 누군가이 경고를 해결하도록 도와 줄 수 있습니까? 미리 많은 감사드립니다!

+1

'const'를 제거하면 문제가 해결되지만 답변으로 문제가 해결되지는 않습니다. – zneak

+0

네, 그렇게 생각했을 수도 있지만 차이를 만드는 것 같지 않습니다. –

+0

initWithURL : 메서드가 NSURL이 아닌 문자열을 사용하는 것이 좋습니까? – zneak

답변

2

로 선언되는 시스템 프레임 워크에있는 많은 방법이 있습니다 : 물론,

- (id)initWithURL:(NSURL *)anURL; 

그리고는, +alloc는 선언과 같은 : 컴파일러가 보는 따라서

- (id) alloc; 

:

ViewController *viewController = [[ViewController alloc] initWithURL:URL]; 

할당의 반환 유형은 id이고 comp iler가 위의 선언을 볼 가능성이 높으며 경고가 표시됩니다. 이제 일반적으로 컴파일러는 선택기에 대해 여러 시그니처 (특정 메서드 이름에 대한 다중 시그니처)가 있음을 경고합니다.

위의 코드 줄이 들어있는 파일에 ViewController.h을 가져 오지 않았기 때문에 가능합니다.

간단히 말해서 은 다른 유형의 인수를 사용하는 다른 메소드와 이름이 같은 메소드를 선언하지 않습니다.

+0

감사합니다. bbum, 나는 함수 호출이 표시된 색상으로 그 점을 발견 했어야합니다. 함수 호출과 변수 이름을 initWithSourceURL과 sourceURL로 각각 변경하면 경고가 해결됩니다. –

+0

우수. 또한 메소드를 'initWithSourceURLString :'과 같이 변경하는 것이 좋습니다. URL이 끝나면 대개 매개 변수가 NSURL * – bbum