2012-01-14 7 views
10

Pracuję nad projektem używającym ARC i mam problem z istniejącym fragmentem kodu, który już miałem.niejawna konwersja wskaźnika pośredniego do wskaźnika obiektu c przy użyciu ARC

herezje kod:

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

    return self; 
} 

Im uzyskiwanie błąd, który mówi:

niejawna konwersja z pośrednim wskaźnikiem do Objective-C wskaźnik do 'NSError' jest niedozwolone z ARC.

Co należy zrobić, aby rozwiązać ten problem? Próbowałem zrobić mostek, ale nie zadziałało. Każda pomoc jest doceniana.

No i właśnie o wyjaśnienie, w pliku .h to jak oświadczyłem zmienną errorPointer:

NSError * errorPointer;

Dzięki!

Odpowiedz

9

Powinno być

errorPointer = *error; // no error here 

dwóch zmiennych różnią się poziomem zadnie (najprościej mówiąc, liczba gwiazd w ich deklaracji nie jest taka sama). Musisz dodać * przed numerem error, aby zrównoważyć dodatkowe * z errorPointer.

+2

Czy nie powinno to być 'errorPointer = * error;'? – UIAdam

+0

@AdamW Absolutnie, masz rację! Byłem zdezorientowany z powodu nazewnictwa. Dzięki! – dasblinkenlight

+0

Dziękuję bardzo! to rozwiązało problem! –

1

errorPointer i error mają niedopasowane typy.

Na podstawie kodu, który tam masz, wydaje się, że Twój argument error powinien zostać zadeklarowany jako NSError *.

+0

Aby nieznacznie się rozszerzyć, jedynym powodem użycia podwójnego argumentu indeksu ('NSError **') byłoby, gdybyś musiał przydzielić błąd w ramach tej metody init i aby był dostępny dla osoby dzwoniącej. – UIAdam

+0

Tak, i jest to powszechny wzorzec w metodach kakao. Wiele metod architektury kakao zwraca błąd (jeśli jest) za pośrednictwem argumentu "NSError *" przekazywanego przez referencję do metody. –

+0

@AndrewMadsen Na pewno ... ale w tym przypadku nie jest oczywiste, że chce to zrobić, stąd moja sugestia, by zmienić typ argumentu. – UIAdam

Powiązane problemy