Проверьте, нет ли NSDictionary

Я хочу проверить, пустой ли 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];
    }

Но он alwasy сбой на этой строке arrCities = [mutDictValues objectForKey:@"cities"]; со следующей ошибкой:

-[__NSCFConstantString objectForKey:]:

Может кто-нибудь мне помочь?

Ответ 1

При извлечении значений словаря из NSUserDefaults, которые словарь автоматически преобразуется в строку, что является причиной сбой и проверка использования словаря

[dictionary count];

EDIT: - используйте метод 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"]);

Ответ 2

попробуйте это,

if([myDict count] > 0)
    NSLog(@"Dictionary is not empty");
else
    NSLog(@"Dictionary is empty");

Ответ 3

if ( [mutDictValues count] == 0 ) {
    //code here
}
else {
    //code here
}

После того, как вы получили извлеченный dic, это должно сделать

Ответ 4

Где-то вы относитесь к nsstring (конкретному подклассу) как NSdictionary.

Ответ 5

У меня была немного другая проблема, но она связана, поэтому я хотел бы поделиться ею здесь.

Я загружал веб-сервисы и сохранял данные в NSDictionary и снова Fetching objectForKey, который был Null. Итак, решение, которое я нашел, находится под

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 *), когда я отлаживал приложение. Итак, я наконец понял это.

Ответ 6

BOOL containsKeyABC = [myDict: valueForKey:@"ABC"];

int items = dict.count;

if (items > 0) {
     //not empty
}

Ответ 7

Поскольку большинство ответов правильно указали, что вы передаете не распознанный селектор objectForKey: в экземпляр NSString вместо NSDictionary, следовательно, наблюдая исключение

-[__NSCFConstantString objectForKey:]:

Отметьте NSUserDefaults, чтобы узнать, возвращает ли cities словарь или что-то еще. Вы можете сделать это двумя способами.

я. NSLog все данные в NSUserDefaults

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

II. Проверьте файл plist, который хранит NSUserDefaults в папке приложения. Подробнее см. этот ответ.

Надеюсь, что это поможет.

Ответ 8

попробуйте этот код

NSMutableDictionary *dict = ...

BOOL isEmpty = ([dict count] == 0);

Ответ 9

Вы можете использовать ниже код

if(dict == nil)
{
 // blank
}else{
 // there is dictionary
}