4

以下のコードを実行すると、[dict setValue:@"null" forKey:@"name"];がクラッシュし続けます。ここで検索したところ、他の投稿はを使用していない人が原因であることがわかりましたNSMutableDictionary。しかし、私はこれを使用しています。

の場合、なぜこの行でクラッシュするのnameですnullか?

NSMutableArray *tempCustomers = [[NSMutableArray alloc] init];
for (NSMutableDictionary *dict in [[json objectForKey:@"data"] mutableCopy]) {
    if ([dict objectForKey:@"name"] == [NSNull null]) {
        [dict setValue:@"null" forKey:@"name"];
    }
    [tempCustomers addObject:dict];
}
4

3 に答える 3

15

私はこれを使うことになった。これがdeepMutableCopyとは何かと思いますか?

NSMutableArray *tempCustomers = [[NSMutableArray alloc] init];
for (NSMutableDictionary *dict in [[json objectForKey:@"data"] mutableCopy]) {
    if ([dict objectForKey:@"name"] == [NSNull null]) {
        NSMutableDictionary *tempDict = [[NSMutableDictionary alloc] init];
        tempDict = [dict mutableCopy];

        [tempDict setValue:@"null" forKey:@"name"];
        [tempCustomers addObject:tempDict];
    } else {
        [tempCustomers addObject:dict];
    }
}
于 2012-10-01T17:10:51.727 に答える
2

おそらくmutableCopyは「deepMutableCopy」ではありません。つまり、可変オブジェクトを列挙するだけですが、このコレクションのオブジェクトは可変ではありません(私のコメントからコピー)

于 2012-10-01T17:01:25.127 に答える
0

新しい配列[[NSMutableArray alloc]initWithArray:[json objectForKey:@"data"]]を作成し、forループで使用します

ただし、代わりに実行し[json objectForKey:@"data"]て、新しいアレイに置き換えます。次のようになります。

NSMutableArray *tempCustomers = [[NSMutableArray alloc] init];
NSMutableArray *search = [[NSMutableArray alloc]initWithArray:[json objectForKey:@"data"]];
for (NSMutableDictionary *dict in search)
{
    if ([dict objectForKey:@"name"] == [NSNull null])
    {
        [dict setValue:@"null" forKey:@"name"];
    }
    [tempCustomers addObject:dict];
}
于 2014-11-18T08:31:33.613 に答える