2011-01-01 4 views
0

also hier ist meine FunktioniPhone NSMutableDictionary setObject forKey nach initWithContentsOfFile

+ (void) AddAddress:(NSString*)ip:(NSString*)mac { 
    NSMutableDictionary* currentAddresses = [[NSMutableDictionary alloc] initWithContentsOfFile:[self filePath:ADDRESSES_FILE]]; 
    [currentAddresses setObject:mac forKey:ip]; 
    [Configuration Write:currentAddresses]; 
    [currentAddresses release]; 
} 

[self filePath: ADDRESSES_FILE] gibt einen String den vollständigen Pfad einer Datei (ADDRESSES_FILE) in den Dokumenten befinden enthält. Die Datei existiert möglicherweise nicht, in diesem Fall möchte ich nur ein Objekt in das Wörterbuch schreiben und dann notieren

Das Problem ist, dass, wenn ich SetObject forKey es nichts zum Diktat hinzufügen (wenn ich nur do allok init zum dict, es funktioniert gut, aber ich möchte die Datensätze aus der Datei lesen, wenn es welche gibt, und einen Datensatz mit der Funktion AddAddress ersetzen/hinzufügen)

+1

'AddAddress ::' ist kein beschreibender Methodenname (und völlig gegen Objective-C Konvention). Versuchen Sie 'addIPAddress: mac:' stattdessen. Methodennamen sollten ebenfalls mit Kleinbuchstaben beginnen. 'write:', nicht 'Write:' (die Ausnahme sind Dinge wie 'URLWithString:'; Akronyme. – bbum

+0

danke, ich habe gerade mit Ziel C angefangen und mich erst daran gewöhnt –

Antwort

2

Das erste, was Sie zuerst respektiere die Benennungskonvention von ObjC, um leichter verständlich zu sein ... Zum Beispiel beginnen Methodennamen mit einem kleinen Fall und es ist besser, einen beschreibenden Namen vor die Doppelpunkte für jedes Argument zu setzen, ein Methodenname wie dieser: AddAddress:: ist nicht wirklich gut ...

Jetzt, über das Laden eines Wörterbuchs aus einer Datei, die Sache ist, dass, wenn die Datei nicht geladen werden kann (existiert nicht, falsches Format, ...), das zurückgegebene Objekt wird Null, der einfachste Weg zu korrigieren das ist zu setzen:

if(currentAddresses == nil) currentAddresses = [[NSMutableDictionary alloc] init];