Проверьте, нет ли 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
}