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:]:
誰かがこれを手伝ってくれる?
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"]);
if ( [mutDictValues count] == 0 ) {
//code here
}
else {
//code here
}
あなたのdicを取得した後、これは行うべきです
これを試して、
if([myDict count] > 0)
NSLog(@"Dictionary is not empty");
else
NSLog(@"Dictionary is empty");
少し別の問題がありましたが、関連しているのでここで共有したいと思います。
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 *)が返されたため、最終的にこの方法を理解しました。
どこかでnsstring(具象サブクラス)をNSdictionaryとして扱います。
ほとんどの回答は、認識されないセレクタobjectForKey:
をNSString
ではなくNSDictionary
インスタンスに渡しており、したがって例外が発生していることを正しく指摘しています
-[__NSCFConstantString objectForKey:]:
NSUserDefaults
をチェックして、cities
が辞書などを返すかどうかを確認します。あなたはこれを2つの方法で行うことができます
I. NSLog
NSUserDefaults
のすべてのデータ
NSLog(@"%@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
II。アプリケーションフォルダーからNSUserDefaults
を格納するplistファイルを確認します。詳細は this answer を確認してください。
お役に立てば幸いです。
以下のコードを使用できます
if(dict == nil)
{
// blank
}else{
// there is dictionary
}
BOOL containsKeyABC = [myDict: valueForKey:@"ABC"];
int items = dict.count;
if (items > 0) {
//not empty
}
このコードを試してください
NSMutableDictionary *dict = ...
BOOL isEmpty = ([dict count] == 0);