2016-07-15 11 views
-1

Ich habe ein NSMutableArray 'myArray', das einige customObject 'A' enthielt, Jetzt möchte ich 'myArray' in tempArray konvertieren, die ein Objekt enthielt, dessen Unterklasse 'A' mit 'B' benannt wurde. Als Eigenschaft wie folgt:Problem beim Konvertieren auf NSArray

NSMutableArray <B *> tempArray; 
tempArray = [myArray mutableCopy]; 

Aber das Objekt in TempArray ist immer irgendwie 'A'. Ich möchte 'A' in 'B' umwandeln, Irgendwelche Vorschläge?

+0

können Sie zeigen Ihre versuchten Code –

+0

wenn Sie tun TempArray = myArray ist wird es immer sein Typ A B nicht geben, und was ist Zweck Tun Sie dies –

+0

Erarbeiten Sie es bitte mehr. Möchten Sie A-Objekte in ihre Unterklasse B umwandeln? –

Antwort

1

'B' hat mehr Eigenschaft, die ich verwenden möchte.

Wie erwarten Sie, dass dies funktioniert? B ist ein Kind von A, es enthält weitere Informationen (die Eigenschaft, die Sie verwenden möchten etc.). Woher kommen die Daten für diese Immobilie?

Sie benötigen einen Weg, um eine neue Instanz von B mit (die Eigenschaften) eine Instanz von A und die Versorgung der zusätzlichen Daten ein B Bedürfnisse zu konstruieren. B möglicherweise bereits eine geeignete init Methode, oder Sie müssen möglicherweise Ihren eigenen Code schreiben.

Sobald Sie eine Möglichkeit haben, ein neues B zu erzeugen, können Sie einfach über Ihr Array iterieren und ein neues erstellen, indem Sie eine neue B Instanz für jede A Instanz erstellen.

HTH

0

Wenn Sie eine unveränderliche Array (NSArray), die Sie bedeutet, können Objekte nicht hinzuzufügen oder zu entfernen oder Objekte mit anderen Objekten zu ersetzen. [myArray mutableCopy] erstellt ein NSMutableArray. Es enthält genau die gleichen Objekte wie das unveränderbare Array, aber Sie können nun Objekte hinzufügen, entfernen oder ersetzen.

Ihre Deklaration NSMutableArray * tempArray tut nichts als den Compiler zu belügen. Wenn myArray Objekte vom Typ A * enthielt, enthält tempArray dieselben Objekte vom Typ A *. Sie lügen nur, so der Compiler glaubt Sie sind Objekte des Typs B *, aber sie sind nicht.

Es gibt keinen Weg auf der Erde, wie ein Compiler ein Objekt einer Klasse automatisch in ein Objekt einer Unterklasse umwandeln könnte. Wenn die Unterklasse zum Beispiel zusätzliche Mitglieder hat, wie wird der Compiler diese Mitglieder füllen? Das kann einfach nicht funktionieren.

Wenn Sie neue Objekte vom Typ B * erstellt werden sollen, basierend auf Objekte vom Typ A *, müssen Sie von Hand tun, wahrscheinlich einen initialiser wie

- (instancetype)initWithA:(A*)a; 

in Ihrer B-Schnittstelle. Der Code könnte zum Beispiel

NSMutableArray <B*> *tempArray = [myArray mutableCopy]; 
for (NSUInteger i = 0; i < tempArray.count; ++i) { 
    tempArray [i] = [[B alloc] initWithA:tempArray [i]]; 
} 

oder möglicherweise

NSMutableArray <B*> *tempArray = [[NSMutableArray alloc] init]; 
for (A* a in myArray) 
    [tempArray addObject:[[B alloc] initWithA:a]]; 
Verwandte Themen