[objective-c] Fehler: Schreibbare atomare Eigenschaft kann einen synthetisierten Setter / Getter nicht mit einem benutzerdefinierten Setter / Getter verbinden



Answers

Sie müssen den Getter auch implementieren. Beispiel:

// Interface:

@property (retain) NSObject * someProperty;

// Implementation:

- (void)setSomeProperty:(NSObject *)newValue
{
    @synchronized (self)
    {
        // ...
    }
}

- (NSObject *)someProperty
{
    NSObject *ret = nil;

    @synchronized (self)
    {
        ret = [[someProperty retain] autorelease];
    }

    return ret;
}
Question

Ich habe kürzlich versucht, ein älteres Xcode-Projekt zu kompilieren (das früher recht gut kompiliert wurde), und jetzt sehe ich viele Fehler in dieser Form:

error: writable atomic property 'someProperty' cannot pair a synthesized setter/getter with a user defined setter/getter

Das Codemuster, das diese Fehler verursacht, sieht immer so aus:

// Interface:

@property (retain) NSObject * someProperty;

// Implementation:

@synthesize someProperty; // to provide the getter
- (void)setSomeProperty:(NSObject *)newValue
{
    //..
}

Ich kann sehen, warum der Fehler generiert wird. Ich sage dem Compiler, dass er meine Property-Accessoren (sowohl Getter als auch Setter) synthetisieren soll, und überschreibe dann sofort den Setter manuell. Dieser Code hat immer etwas gerochen.

Also, was ist der richtige Weg, dies zu tun? Wenn ich @dynamic anstelle von @synthesize , muss ich auch den Getter schreiben. Ist das der einzige Weg?






Links