2017-08-31 2 views
-1

Ich habe zwei NSMutableArray s, beide erhalten die gleichen Daten. Mein Problem ist, dass, wenn ich die gleichen Daten den veränderbaren Arrays aus verschiedenen Wörterbüchern zuweise und Operationen auf einem NSMutableArray ausführen, beide Arrays betrifft.NSMutableArray beeinflusst das andere NSMutableArray?

Wenn ich zum ersten Mal Operationen wie replaceObjectAtIndex:WithObject: führe, ist das Array nicht betroffen, aber wenn das zweite Ersetzen aufgerufen wird, haben beide Arrays den ersetzten Wert. Ich denke, es ist ein Bezugsproblem.

Hat jemand eine Lösung dafür?

Name der NSMutableArrays ist helper.urlsRecording und helper.holdingArr.

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; 
NSMutableDictionary *dict2 = [[NSMutableDictionary alloc] init]; 
[dict setValue:outputFileURL forKey:@"URL"]; 
[dict setValue:@"1" forKey:@"index"]; 
[dict2 setValue:outputFileURL forKey:@"URL"]; 
[dict2 setValue:@"1" forKey:@"index"]; 
[helper.urlsRecording addObject:dict]; 
[helper.holdingArr addObject:dict2]; 


[helper.urlsRecording replaceObjectAtIndex:button.tag withObject:urlAr];//When this called second time, both the arrays is effected(helper.urlsRecording as well as helper.holdingArr). 

Wie kann ich das Kopieren der Referenz auf ein anderes Array verhindern?

Button-Click:

if([button isSelected] == NO){ 

    NSLog(@"Url Recording : %@",helper.urlsRecording); 
    [[helper.urlsRecording objectAtIndex:button.tag] removeObjectForKey:@"URL"]; 
    button.selected = YES; 
    NSLog(@"Url Recording : %@",helper.urlsRecording); 
} 
else{ 
    [helper.urlsRecording replaceObjectAtIndex:button.tag withObject:[helper.holdingArr objectAtIndex:button.tag]]; 
    button.selected = NO; 
    NSLog(@"Url Recording : %@",helper.urlsRecording); 

} 

Hinweis: NSMutableArray definiert ist global in einer Klasse zu erreichen.

+0

, wie Sie diese zwei Arrays initialisiert wird? –

+0

@ReinierMelian Überprüfen Sie die Bearbeitung bitte – Williams

+0

Ja, ich initialisiere sie, das ist, warum ich die Daten bekomme. – Williams

Antwort

3

Dies liegt daran, dass Ihre Instanzwerte für beide Wörterbücher gleich sind.

So suchen Sie zuerst eine mutableDictionary wie unter

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; 
[dict setValue:outputFileURL forKey:@"URL"]; 
[dict setValue:@"1" forKey:@"index"]; 

Und zweitens Wörterbuch durch mutableCopy erstellen, so wird beispielsweise für beide unterschiedlich sein.

NSMutableDictionary *dict2 = [dict mutableCopy]; 

Danach können Sie sie in entsprechend NSMutableArray und aktualisieren hinzuzufügen.

+0

Das Problem ist das gleiche, beim zweiten Mal, wenn die Daten auf das Array verweisen, ist die Referenz immer noch dieselbe, wenn die Schaltfläche zum zweiten Mal angeklickt wird. – Williams

+0

Was machen Sie auf Knopfdruck? Zeig mir den Code –

+0

Überprüfen Sie die Bearbeitung bitte – Williams

0

ein copy/mutableCopy Wörterbuch Nehmen & dann Objekt der MutableArray hinzufügen

[helper.urlsRecording addObject:[dict copy]]; 
[helper.holdingArr addObject:[dict2 copy]]; 
+0

Ich werde das versuchen. – Williams

+0

okey. Hat das bei dir funktioniert? –

+0

Kein Bruder. funktioniert nicht. – Williams

Verwandte Themen