Automatische Referenzzählung: Zeiger auf nicht konstantes Typ 'nSerror *' ohne explizites Eigentum
-
25-10-2019 - |
Frage
Bei der Aktualisierung eines Teils meines Codes, um mit dem iOS 5 SDK kompatibel zu sein, versuchte ich, meinen Code mit "Konvertieren in den Objective-C-ARC in Xcode konvertieren" und empfing einen Fehler. Der Fehler tritt in einer Instanzvariablen in meiner .h -Datei auf.
NSError **_error;
In dem Fehler heißt es "Zeiger auf nicht konstantes Typ 'nSerror *' ohne explizites Eigentum." Wie könnte ich das beheben?
Lösung
Beim Speichern NSError
Objekte in einer Instanzvariablen müssen Sie es als einfachen Zeiger deklarieren:
@interface Foo : NSObject
{
NSError *_errror;
}
NSError **
wird nur verwendet, um indirekt zurückzukehren NSError
Objekte von einer Methode zum Anrufer. Es ist (wahrscheinlich) ein Fehler, es in einer Instanzvariablen zu speichern.
Andere Tipps
Sie können einen der in der beschriebenen lebenslangen Qualifikation verwenden Übergang zu ARC -Versionsnotizen
Für NSError ** Sie würden __Autorelease verwenden, sodass das von Nikolai bereitgestellte Beispiel so aussehen würde
@interface Foo : NSObject
{
NSError * __autoreleasing *error;
}
Die Syntax ist etwas seltsam und Sie sollten Nikolais -Ratschlägen folgen, aber wenn Sie sicher sind, dass NSError ** das ist, was Sie wollen, sollte dies funktionieren.