0

辞書の配列を含む plist ファイルがありますここに画像の説明を入力

これをトラバースして、キー fQty ですべてのキーと値を削除するにはどうすればよいですか? fQty フィールドを無視して辞書を新しい辞書と比較できるように、fQty を削除する必要があります。

4

2 に答える 2

0

これを試して:

(あなたの pilst ファイルが data.plist という名前であると仮定します)

- (void) deal:(id)item
{
    if ([item isKindOfClass:[NSDictionary class]]) {
        for (id key in item) {
            id it = [item objectForKey:key];
            if ([it isKindOfClass:[NSDictionary class]] || [it isKindOfClass:[NSArray class]]) {
                [self deal:it];
            }
        }
        if ([item objectForKey:@"fQty"]!=nil) {
            [item setObject:@"0" forKey:@"fQty"];
        }
    }
    if ([item isKindOfClass:[NSArray class]]) {
        for (id it in item) {
            if ([it isKindOfClass:[NSDictionary class]] || [it isKindOfClass:[NSArray class]]) {
                [self deal:it];
            }
        }
    }
}

{
    NSError** error = nil;
    NSPropertyListFormat format;
    NSArray *dma = (NSMutableArray *)[NSPropertyListSerialization
                                             propertyListWithData:[NSData dataWithContentsOfFile:[[NSBundle mainBundle]pathForResource:@"XD" ofType:@"plist"]]
                                            options:NSPropertyListMutableContainersAndLeaves
                                             format:&format error:error];

    [self deal:dma];
}

これで、myArray が必要になります。

編集: キー @"fQty" の値を 0 に設定します。

for ループの行を [item setObject:@"0" forKey:@"fQty"] に変更します。

もう一度編集: 再帰的な方法で問題を解決します。

于 2013-08-28T07:47:45.053 に答える
0

これは少し大雑把ですが、次のようなものを使用できます。

-(BOOL)isObjectAdictionary:(id)object{
    if([object isKindOfClass:[NSMutableDictionary class]]||[object isKindOfClass:[NSDictionary class]]){
    return YES;
    }
    return NO;
}

 -(BOOL)isObjectAnArray:(id)object{
      if([object isKindOfClass:[NSMutableArray class]]||[object isKindOfClass:[NSArray class]]){
         return YES;
      }
     return NO;
   }


-(id)loop:(id)object removeObjectWithKey:(NSString *)key{

if([self isObjectAdictionary:object]){
    NSMutableDictionary *mutableObject = [NSMutableDictionary dictionaryWithDictionary:object];
    if([[mutableObject allKeys]containsObject:key]){
        [mutableObject removeObjectForKey:key];
        object = mutableObject;
        return object;
    }

}

if([object respondsToSelector:@selector(count)]){


    if([self isObjectAdictionary:object]){
        NSMutableDictionary *objects_copy = [NSMutableDictionary dictionaryWithDictionary:object];
        for(NSString *objects_key in object){

            id tempObject = [object valueForKey:objects_key];
            tempObject = [self loop:tempObject removeObjectWithKey:key];
            [objects_copy setObject:tempObject forKey:objects_key];
        }
        object =(id)objects_copy;
    }
    else if([self isObjectAnArray:object]){//an array
        NSMutableArray *objects_copy = [NSMutableArray arrayWithArray:object];
        for(int i = 0;i<[object count];i++){
            id tempObject = [object objectAtIndex:i];
           tempObject = [self loop:tempObject removeObjectWithKey:key];
            [objects_copy replaceObjectAtIndex:i withObject:tempObject];
        }
        object = (id)objects_copy;
    }

}
 return object;
}

次のように使用できます。[self loop:yourArray removeObjectWithKey:@"fQty"]);

于 2013-08-28T07:56:30.870 に答える