Ich habe gerade gelernt, wie KVO
, aber nur die Grundlagen zu verwenden. Was ich erreichen muss, ist etwas in der Art:Objective C - How To Verweis auf mehrere Objekte mit Schlüsseln wie NSMutableDictionary Works
Ich habe einen Delegat Anruf, der ein Speaker
Objekt übergibt.
- (void)onSpeakerFound:(Speaker *)speaker
Sobald erhalte ich diese Speaker
im UI-Teil, von dort werde ich Beobachter für dieses Objekt zugewiesen werden.
Aber das ist nur für einen Lautsprecher. Was passiert, wenn ich mehrere Sprecher im Auge habe? Ich muss für diese Sprecher Beobachter separat zuweisen und gleichzeitig möchte ich ihre Referenzen für weitere Aktualisierungen der Werte behalten.
Jeder Lautsprecher konnte von Zeit zu Zeit aktualisiert werden. Wenn ich also feststelle, dass sich bei einem Lautsprecher etwas geändert hat, möchte ich auf die Referenz zu diesem Lautsprecher zugreifen und die Werte aktualisieren, so wie NSMutableDictionary
funktioniert.
NSMutableDictionary
erstellt eine Kopie eines Objektsatzes, so dass es ein Differenzobjekt ist, wenn ich es wieder aus dem Wörterbuch bekomme.
Gibt es also eine Klasse, die es mir erlaubt, ein Objekt zu verfolgen, indem ich nur eine Referenz nur auf dieses Objekt lege, ohne es zu kopieren?
EDIT: Ein Test gemacht, um zu überprüfen, dass, wenn ein instanziiertes Objekt in einem NSMutableDictionary
gesetzt ist, das instanziierte Objekt nicht mit dem in NSMutableDictionary
festgelegten referenziert wird.
- (void)viewDidLoad
{
[super viewDidLoad];
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
NSString *obj = @"initial value";
NSString *key = @"key";
[dict setObject:obj forKey:key];
NSLog(@"Object is now %@", [dict objectForKey:key]);
obj = @"changed value";
NSLog(@"Object is now %@", [dict objectForKey:key]);
}
Log:
2016-07-26 21:04:58.759 AutoLayoutTest[49723:2144268] Object is now initial value
2016-07-26 21:04:58.761 AutoLayoutTest[49723:2144268] Object is now initial value
Könnten Sie log 'NSLog (@ "Adresse% p", obj);' nach der Erstellung, nachdem er wieder aus dem Wörterbuch bekommen, und dann nach ihrem Wert zu ändern? Du wirst den Unterschied sehen. Führen Sie einen anderen Test durch, jedoch mit einem 'NSMutableString' statt einer Instanz, die Zeichen ersetzt:' [(NSMutableString *) obj replaceCharactersInRange: NSMakeRange (0, [@ "anfängliche" Länge]) withString: @ "Ersetzung"]; ' – Larme
@Larme Danke , Ich führe mich nur zur Verwirrung mit der Sache NSString. –