我想检查NSDictionary
是否为空。我是这样做的。
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];
}
但是这条线arrCities = [mutDictValues objectForKey:@"cities"];
崩溃了,出现以下错误:
-[__NSCFConstantString objectForKey:]:
有人可以帮我这个吗?
答案 0 :(得分:22)
从NSUserDefaults中检索字典值时 字典自动转换为字符串,这是原因 崩溃和检查字典使用
[dictionary count];
编辑: - 使用dictionaryForKey: 方法
NSDictionary *dict =[[NSDictionary alloc]initWithObjectsAndKeys:@"hi",@"one",nil];
[[NSUserDefaults standardUserDefaults] setObject:dict forKey:@"dic"];
NSDictionary *dictn = [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"dic"];
NSLog(@"%@",[dictn objectForKey:@"one"]);
答案 1 :(得分:4)
if ( [mutDictValues count] == 0 ) {
//code here
}
else {
//code here
}
在检索到你的dic后,应该这样做
答案 2 :(得分:2)
试试这个,
if([myDict count] > 0)
NSLog(@"Dictionary is not empty");
else
NSLog(@"Dictionary is empty");
答案 3 :(得分:1)
在某处你将nsstring(一个具体的子类)视为NSdictionary。
答案 4 :(得分:1)
我有一个不同的问题,但它是相关的,所以我想在这里分享。
我正在抓取网络服务&在NSDictionary&中存储数据再次获取Null的objectForKey。所以我找到的解决方案如下
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
}
使用NSNull背后的原因是当我调试应用程序时它返回(NSNull *)所以我终于弄清楚了这一点。
答案 5 :(得分:0)
BOOL containsKeyABC = [myDict: valueForKey:@"ABC"];
int items = dict.count;
if (items > 0) {
//not empty
}
答案 6 :(得分:0)
由于大多数答案都正确地指出您将未识别的选择器objectForKey:
传递给NSString
实例而不是NSDictionary
,因此观察异常
-[__NSCFConstantString objectForKey:]:
检查NSUserDefaults
以查看cities
是否返回字典或其他内容。你可以通过两种方式做到这一点
予。 NSLog
NSUserDefaults
NSLog(@"%@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
II。检查从Application文件夹中存储NSUserDefaults
的plist文件。查看this answer了解详情。
希望有所帮助。
答案 7 :(得分:0)
试试这段代码
NSMutableDictionary *dict = ...
BOOL isEmpty = ([dict count] == 0);
答案 8 :(得分:0)
您可以使用以下代码
if(dict == nil)
{
// blank
}else{
// there is dictionary
}