问题
I want to check if an NSDictionary
is empty. I am doing it like this.
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];
}
But it alwasy crashes on this line arrCities = [mutDictValues objectForKey:@"cities"];
with the following error:
-[__NSCFConstantString objectForKey:]:
Can someone help me with this ?
回答1:
While retrieving the dictionary values from NSUserDefaults that dictionary automatically converted into string that is the reason for getting crashed and for checking dictionary use
[dictionary count];
EDIT:- use dictionaryForKey: method
NSDictionary *dict =[[NSDictionary alloc]initWithObjectsAndKeys:@"hi",@"one",nil];
[[NSUserDefaults standardUserDefaults] setObject:dict forKey:@"dic"];
NSDictionary *dictn = [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"dic"];
NSLog(@"%@",[dictn objectForKey:@"one"]);
回答2:
if ( [mutDictValues count] == 0 ) {
//code here
}
else {
//code here
}
After having your dic retrieved this should do
回答3:
try this,
if([myDict count] > 0)
NSLog(@"Dictionary is not empty");
else
NSLog(@"Dictionary is empty");
回答4:
Somewhere you treat a nsstring (a concrete subclass) as NSdictionary.
回答5:
I had a bit different issue but it is related so i would like to share it here.
I was fetching the webservices & storing data in NSDictionary & again Fetching objectForKey which was Null. So the solution i found is as under
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
}
The reason behind using NSNull was it was returning (NSNull *) when i debugged the application So i finally figured out this way.
回答6:
As most of the answers have correctly pointed out that you are passing un-recognized selector objectForKey:
to a NSString
instance instead of NSDictionary
, hence observing exception
-[__NSCFConstantString objectForKey:]:
Check NSUserDefaults
to see whether cities
returns a dictionary or something else. You can do this by two ways
I. NSLog
all data in NSUserDefaults
NSLog(@"%@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
II. Check the plist file which store the NSUserDefaults
from the Application folder. Check this answer for more details.
Hope that helps.
回答7:
BOOL containsKeyABC = [myDict: valueForKey:@"ABC"];
int items = dict.count;
if (items > 0) {
//not empty
}
回答8:
try this code
NSMutableDictionary *dict = ...
BOOL isEmpty = ([dict count] == 0);
来源:https://stackoverflow.com/questions/17745336/check-if-nsdictionary-is-empty