Ich möchte prüfen, ob eine NSDictionary
leer ist. Ich mache das so.
mutDictValues = [[[NSUserDefaults standardUserDefaults] objectForKey:@"dicValues"]mutableCopy];
NSLog(@"dictValues are %@",mutDictValues);
if(mutDictValues == NULL){
arrCities = [[NSMutableArray alloc]init];
NSLog(@"no cities seleceted");
}else{
arrCities = [[NSMutableArray alloc]init];
arrCities = [mutDictValues objectForKey:@"cities"];
[self placeCities];
}
Es stürzt jedoch immer in dieser Zeile arrCities = [mutDictValues objectForKey:@"cities"];
mit dem folgenden Fehler ab:
-[__NSCFConstantString objectForKey:]:
Kann mir jemand dabei helfen?
Beim Abrufen der Wörterbuchwerte aus NSUserDefaults wird das Wörterbuch automatisch in eine Zeichenfolge konvertiert. Dies ist der Grund dafür, dass Abstürzt und das Wörterbuch überprüft wird
[dictionary count];
EDIT: - Use dictionaryForKey: -Methode
NSDictionary *dict =[[NSDictionary alloc]initWithObjectsAndKeys:@"hi",@"one",nil];
[[NSUserDefaults standardUserDefaults] setObject:dict forKey:@"dic"];
NSDictionary *dictn = [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"dic"];
NSLog(@"%@",[dictn objectForKey:@"one"]);
if ( [mutDictValues count] == 0 ) {
//code here
}
else {
//code here
}
Nachdem Sie Ihr DIC abgerufen haben, sollte dies funktionieren
versuche dies,
if([myDict count] > 0)
NSLog(@"Dictionary is not empty");
else
NSLog(@"Dictionary is empty");
Ich hatte ein etwas anderes Thema, aber es hängt damit zusammen, also möchte ich es hier teilen.
Ich holte die Webservices ab und speicherte Daten in NSDictionary. Wieder holte ich objectForKey, was Null war. Die Lösung, die ich gefunden habe, ist also unter
NSMutableDictionary *result = [NSJSONSerialization JSONObjectWithData:[str dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil];
// NSLog(@"%@" , result);
NSMutableDictionary *sup = [result objectForKey:@"keysupplied"];
NSNull *n=[NSNull null];
if ( sup ! = n ){
//Your code if its not null
}
Der Grund für die Verwendung von NSNull war, dass es zurückkehrte (NSNull *), als ich die Anwendung debuggen konnte.
Irgendwo behandeln Sie einen NS-String (eine konkrete Unterklasse) als NS-Wörterbuch.
Da die meisten Antworten richtig darauf hingewiesen haben, dass Sie den nicht anerkannten Selektor objectForKey:
an eine NSString
-Instanz statt an NSDictionary
übergeben, beachten Sie daher die Ausnahme
-[__NSCFConstantString objectForKey:]:
Überprüfen Sie NSUserDefaults
, um zu sehen, ob cities
ein Wörterbuch oder etwas anderes zurückgibt. Sie können dies auf zwei Arten tun
I. NSLog
alle Daten in NSUserDefaults
NSLog(@"%@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
II. Überprüfen Sie die Plist-Datei, die die NSUserDefaults
im Anwendungsordner speichert. Überprüfen Sie diese Antwort für weitere Details.
Hoffentlich hilft das.
Sie können den folgenden Code verwenden
if(dict == nil)
{
// blank
}else{
// there is dictionary
}
BOOL containsKeyABC = [myDict: valueForKey:@"ABC"];
int items = dict.count;
if (items > 0) {
//not empty
}
versuchen Sie diesen Code
NSMutableDictionary *dict = ...
BOOL isEmpty = ([dict count] == 0);