16

我想检查一个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:]:

有人可以帮我弄这个吗 ?

4

9 回答 9

25

从 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"]);
于 2013-07-19T11:49:33.520 回答
8
if ( [mutDictValues count] == 0 ) {
    //code here
}
else {
    //code here
}

检索到您的 dic 后,应该这样做

于 2013-07-19T12:39:29.243 回答
2

尝试这个,

if([myDict count] > 0)
    NSLog(@"Dictionary is not empty");
else
    NSLog(@"Dictionary is empty");
于 2013-07-19T11:47:19.683 回答
1

在某个地方,您将 nsstring(一个具体的子类)视为 NSdictionary。

于 2013-07-19T11:49:18.490 回答
1

我有一点不同的问题,但它是相关的,所以我想在这里分享。

我正在获取 Web 服务并将数据存储在 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 *) 所以我终于想通了这种方法。

于 2015-01-05T06:16:05.993 回答
1
BOOL containsKeyABC = [myDict: valueForKey:@"ABC"];

int items = dict.count;

if (items > 0) {
     //not empty
}
于 2013-07-19T11:47:07.057 回答
0

试试这个代码

NSMutableDictionary *dict = ...

BOOL isEmpty = ([dict count] == 0);
于 2014-09-30T11:00:48.340 回答
0

正如大多数答案正确指出的那样,您将无法识别的选择器objectForKey:传递给NSString实例而不是NSDictionary,因此观察异常

-[__NSCFConstantString objectForKey:]:

检查NSUserDefaults是否cities返回字典或其他内容。你可以通过两种方式做到这一点

一、NSLog所有数据NSUserDefaults

NSLog(@"%@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);

二、检查存储NSUserDefaults应用程序文件夹中的 plist 文件。检查此答案以获取更多详细信息。

希望有帮助。

于 2013-07-19T12:00:57.517 回答
0
if (myDict.count)
    NSLog(@"Dictionary is not empty");
else
    NSLog(@"Dictionary is empty");

每个0等于 的数@NO

每个不0等于的数@YES

因此,您可以将计数传递给if.

于 2021-12-17T10:27:31.170 回答