16

NSDictionaryanが空かどうかを確認したい。私はこのようにしています。

  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
}

あなたのディックを取得した後、これは行うべきです

于 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
BOOL containsKeyABC = [myDict: valueForKey:@"ABC"];

int items = dict.count;

if (items > 0) {
     //not empty
}
于 2013-07-19T11:47:07.057 に答える
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 に答える
0

objectForKey:ほとんどの回答が、認識されていないセレクターを のNSString代わりにインスタンスに渡していることを正しく指摘しているNSDictionaryため、例外が観察されます

-[__NSCFConstantString objectForKey:]:

ディクショナリまたはその他のものが返されるNSUserDefaultsかどうかを確認します。citiesこれは2つの方法で行うことができます

I.NSLogすべてのデータNSUserDefaults

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

Ⅱ.NSUserDefaultsApplication フォルダからを格納する plist ファイルを確認します。詳細については、この回答を確認してください。

それが役立つことを願っています。

于 2013-07-19T12:00:57.517 に答える
0

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

NSMutableDictionary *dict = ...

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