2012-01-14 3 views
10

저는 ARC를 사용하는 프로젝트에서 작업 중이며 이미 가지고있는 기존 코드에 문제가 있습니다.암시 적으로 간접 포인터를 ARC를 사용하여 objective-c 포인터로 변환

을 heres 코드 : 'NSError'에 목표 - C 포인터 간접 포인터의

암시 적 변환이 ARC으로 허용되지 않습니다 :

- (id)initWithError:(NSError **)error 
{ 
    if ((self = [super init])) 
    { 
     errorPointer = error; //Getting error here 
    } 

    return self; 
} 

임라는 오류가 나타납니다.

이 문제를 해결하려면 어떻게해야합니까? 브릿지 캐스트를 시도했지만 작동하지 않았습니다. 도움을 주시면 감사하겠습니다.

오는 설명 들어, .H 파일이 내가 변수 errorPointer 선언하는 방법입니다 :

NSError * errorPointer을;

고마워요!

답변

9

그것은

errorPointer = *error; // no error here 

두 변수 간접의 레벨 차이가 있어야한다 (간단히 말해서, 자신의 선언 등급의 수는 동일하지 않다). errorPointer의 추가 *을 상쇄하려면 error 앞에 *을 추가해야합니다.

+2

'errorPointer = * error;'가 아닌가? – UIAdam

+0

@AdamW 물론, 당신 말이 맞습니다! 이름 때문에 혼란스러워. 감사! – dasblinkenlight

+0

대단히 고마워요! 그게 문제를 해결 했어! –

1

errorPointer와 error의 유형이 일치하지 않습니다.

코드에 따라 error 인수는 NSError *으로 선언되어야합니다.

+0

약간 확장하려면 두 개의 간접 인수 ('NSError **')를 사용하는 유일한 이유는 init 메소드 내에서 오류를 할당하고 호출자가 사용할 수 있어야합니다. – UIAdam

+0

예, 코코아 메소드의 일반적인 패턴입니다. 많은 Cocoa 프레임 워크 메소드는 메서드에 대한 참조에 의해 전달 된 NSError * 인수를 통해 오류 (있는 경우)를 반환합니다. –

+0

@AndrewMadsen 확실히 ... 그러나이 경우에는 그가 그것을하고 싶어한다는 것이 명백하지 않으므로, 논쟁의 유형을 바꾸는 나의 제안. – UIAdam

관련 문제