web-dev-qa-db-ja.com

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];
    }

しかし、常にこの行でクラッシュしますarrCities = [mutDictValues objectForKey:@"cities"];次のエラーが発生しました:

-[__NSCFConstantString objectForKey:]:

誰かがこれを手伝ってくれる?

14
Steaphann

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"]);
22
Balu
if ( [mutDictValues count] == 0 ) {
    //code here
}
else {
    //code here
}

あなたのdicを取得した後、これは行うべきです

4
rashii

これを試して、

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

少し別の問題がありましたが、関連しているのでここで共有したいと思います。

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 *)が返されたため、最終的にこの方法を理解しました。

1
Aadil Keshwani

どこかでnsstring(具象サブクラス)をNSdictionaryとして扱います。

1
vikingosegundo

ほとんどの回答は、認識されないセレクタobjectForKey:NSStringではなくNSDictionaryインスタンスに渡しており、したがって例外が発生していることを正しく指摘しています

-[__NSCFConstantString objectForKey:]:

NSUserDefaultsをチェックして、citiesが辞書などを返すかどうかを確認します。あなたはこれを2つの方法で行うことができます

I. NSLogNSUserDefaultsのすべてのデータ

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

II。アプリケーションフォルダーからNSUserDefaultsを格納するplistファイルを確認します。詳細は this answer を確認してください。

お役に立てば幸いです。

0
Amar

以下のコードを使用できます

if(dict == nil)
{
 // blank
}else{
 // there is dictionary
}
0
Gurjinder Singh
BOOL containsKeyABC = [myDict: valueForKey:@"ABC"];

int items = dict.count;

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

このコードを試してください

NSMutableDictionary *dict = ...

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