2015-08-20 3 views
1
category =  (
       { 
      "category_id" = 18; 
      column = 1; 
      description = "Electrician Works"; 
      image = "images/Electrician.jpg"; 
      "meta_description" = "Electrician Works"; 
      "meta_keyword" = "Electrician Works"; 
      name = Electrician; 
      "parent_id" = ""; 
      "sort_order" = 3; 
      status = enable; 
      subcategory =    (
      ); 
      top = ""; 
     }, 
       { 
      "category_id" = 19; 
      column = 1; 
      description = "Plumbing Works"; 
      image = "images/Plumber.png"; 
      "meta_description" = "Plumbing Works"; 
      "meta_keyword" = "Plumbing Works"; 
      name = Plumber; 
      "parent_id" = ""; 
      "sort_order" = 1; 
      status = disable; 
      subcategory =    (
      ); 
      top = ""; 
     }, 
{ 
      "category_id" = 37; 
      column = 0; 
      description = ""; 
      image = "images/SUV.jpg"; 
      "meta_description" = ""; 
      "meta_keyword" = ""; 
      name = SUV; 
      "parent_id" = 20; 
      "sort_order" = 3; 
      status = enable; 
      subcategory =    (
      ); 
      top = ""; 
     } 

Если parent_id = "", то остальные значения должны быть удалены.Как удалить, если данные json равны нулю?

я хранил значение имени & parent_id здесь

{ 
    name = Microwave; 
    parent = ""; 
}, 
    { 
    name = Hatchback; 
    parent = 20; 
}, 
    { 
    name = Sedan; 
    parent = 20; 
}, 
    { 
    name = SUV; 
    parent = 20; 
} 

если родительский идентификатор не существует, то я должен удалить из массива, друзья любого тела помочь мне найти эту проблему.

-(void)responseFunction:(NSMutableDictionary*)response 
{ 
    BOOL sucess; 
    sucess =[response objectForKey:@"sucess"]; 
    if(!sucess) 
    { 
     NSLog(@"%@",response); 
     arrDicCategory=[response objectForKey:@"category"]; 
     for(NSDictionary *dicAllCategory in arrDicCategory) 
     { 
      NSMutableDictionary *dicStorage=[[NSMutableDictionary alloc]init]; 
      [dicStorage setObject:[[dicAllCategory objectForKey:@"name"] length] !=0?[dicAllCategory objectForKey:@"name"]:@"" forKey:@"name"]; 
//   [dicStorage setObject:[dicAllCategory objectForKey:@"parent_id"]!=Nil?[dicAllCategory objectForKey:@"parent"]:@"" forKey:@"parentid"]; 
      [dicStorage setObject:[dicAllCategory objectForKey:@"parent_id"] forKey:@"parent"]; 
      [arrDicName addObject:dicStorage]; 
      NSLog(@"%@",arrDicName); 
     } 
    } 
} 

это мой код ...

I NEED OUTPUT LIKE THIS 

    name = Hatchback; 
    parent = 20; 


    name = Sedan; 
    parent = 20; 


    name = SUV; 
    parent = 20; 

Я пытаюсь удалить значения, используя этот код:

for(int i=0; i<arrDicName.count ; i++) 
     { 
      if([[arrDicName objectAtIndex:i]objectForKey:@"parent"]==Nil) 
      { 
       [arrDicName removeObject:[[arrDicName objectAtIndex:i]objectForKey:@"parent"]]; 
       NSLog(@"AfterRemovingFromThearray%@",arrDicName); 
      } 
     } 

Некоторые вещи неправильно в моем коде я понял, но я не может найти его, так что, наконец, я пришел сюда, помогите друзьям.

+0

Почему массив словарей, когда один словарь будет делать (быстрый взгляд вверх)? – trojanfoe

+0

внутри цикла Я храню значения ..... –

+0

Есть ли какая-то причина, почему внутри вашего цикла 'for' вы не просто свое условие для включения с' if' и предпринимаете соответствующие действия? – CRD

ответ

1

Попробуйте выполнить приведенный ниже код. Я создал фиктивный словарь и массив в соответствии с вашими требованиями.

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; 
[dict setObject:@"" forKey:@"parent_id"]; 
[dict setObject:@"abc" forKey:@"name"]; 

NSMutableDictionary *dict1 = [[NSMutableDictionary alloc] init]; 
[dict1 setObject:@"1" forKey:@"parent_id"]; 
[dict1 setObject:@"abcq" forKey:@"name"]; 

NSMutableDictionary *dict2 = [[NSMutableDictionary alloc] init]; 
[dict2 setObject:@"" forKey:@"parent_id"]; 
[dict2 setObject:@"sss" forKey:@"name"]; 

NSMutableDictionary *dict3 = [[NSMutableDictionary alloc] init]; 
[dict3 setObject:@"2" forKey:@"parent_id"]; 
[dict3 setObject:@"ddd" forKey:@"name"]; 

arrTemp = [[NSMutableArray alloc] init]; 
[arrTemp addObject:dict];[arrTemp addObject:dict1];[arrTemp addObject:dict2];[arrTemp addObject:dict3]; 

NSMutableIndexSet *indexesToDelete = [NSMutableIndexSet indexSet]; 
NSUInteger currentIndex = 0; 

for (id obj in arrTemp) { 
    if([[obj objectForKey:@"parent_id"] isEqualToString:@""]){ 
     [indexesToDelete addIndex:currentIndex]; 
    } 
    currentIndex++; 
} 

[arrTemp removeObjectsAtIndexes:indexesToDelete]; 
NSLog(@"%@", arrTemp); 

Надеюсь, что это поможет. Дайте мне знать, если это не решит вашу проблему.

+0

Почему 'setValue', а не' setObject'? – trojanfoe

+0

@trojanfoe - да, вы правы, setObject будет более общим. Это исправит. – z22

+0

@ z22 bro эта работа была отложена, так что подождите с помощью двух дней, я приму ответ –

0
- (BOOL)isEmptyString:(NSString *)yourParentID 
{ 
    BOOL isEmp = NO; 

    if([[yourParentID stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length] == 0) 
    { 
     isEmp = YES; 
    } 
    else 
    { 
     isEmp = NO; 
    } 

    return isEmp; 
} 

следовать сильфон коду

NSString *parentId = [NSString stringWithFormat:@"%@",[[arrDicName objectAtIndex:i]objectForKey:@"parent"]]; 

    if([self isEmptyString:parentId]) 
    { 
     // Parent id is nil 
     // Do the rest 
    } 
    else 
    { 
     // Parent id is not nil 
    } 

Надеется, что это поможет вам

1

Вашего фрагмента коды имеет несколько проблем:

  1. Вы тестируете "parent" ключ от Nil , Ключ никогда не будет nil, поскольку они не допускаются в классах сбора Objective-C. Вместо этого проверьте, если length > 0.
  2. Вы удаляете объекты из массива, который вы перечисляете, эффективно изменяя длину массива. Это вызовет такие проблемы, как Индекс за пределами исключений или пропущенных элементов.

Лучше всего, чтобы создать новый массив и копировать элементы, которые проходят тест:

NSMutableArray filteredArray = [NSMutableArray new]; 
for (NSDictionary *dict in arrDicName) 
{ 
    NSString *parent = dict[@"parent"]; 
    if (parent.length > 0) 
     [filteredArray addObject:dict]; 
} 
arrDicName = filteredArray; 
Смежные вопросы