2012-05-08 19 views
0

配列から値を取得しようとすると問題が発生します。 IUTableViewに表示するために、この配列からすべての値を取得したいと思います。多次元配列の値を取得する方法

機能のためにダブルを使用する必要がありますか?

{ 
1 =  { 
    dishId = 1; 
    dishName = "Tomato Salades"; 
    dishPrice = 13; 
    dishTypeId = 1; 
    dishTypeName = Starter; 
}; 
2 =  { 
    dishId = 2; 
    dishName = "Leeks Salades"; 
    dishPrice = 12; 
    dishTypeId = 1; 
    dishTypeName = Starter; 
}; 
3 =  { 
    dishId = 3; 
    dishName = Fries; 
    dishPrice = 14; 
    dishTypeId = 2; 
    dishTypeName = "Main Course"; 
}; 
4 =  { 
    dishId = 4; 
    dishName = Beef; 
    dishPrice = 15; 
    dishTypeId = 2; 
    dishTypeName = "Main Course"; 
}; 
7 =  { 
    dishId = 7; 
    dishName = "Cheese Cake"; 
    dishPrice = 8; 
    dishTypeId = 3; 
    dishTypeName = Dessert; 
}; 
menuCountry = France; 
menuDescription = "un menu pas comme les autres pour une region pas comme les autres"; 
menuId = 1; 
menuName = "Autour de l\\Alsace"; 
menuState = 1; 
} 

これは、アレイ内の辞書を作成し、私のPythonコードです:

def getDishOfTheWeek(): 
menuArray = [] 
menuDic = Ddict(dict) 
    for menu in Menus.select().where(state=True): 

     menuDic['menuId']=menu.id 
     menuDic['menuName']=menu.name 
     menuDic['menuCountry']=menu.country.name 
     menuDic['menuDescription']=menu.description 
     menuDic['menuState']=menu.state 
     for d in DishMenuRels.select().where(menu = menu.id).join(Dishes).join(DishTypes).order_by((DishTypes,'name')): 
      menuDic[str(d.dish.id)] = {} 
      menuDic[str(d.dish.id)]['dishTypeName'] = d.dish.dishType.name 
      menuDic[str(d.dish.id)]['dishTypeId'] = d.dish.dishType.id 
      menuDic[str(d.dish.id)]['dishId'] = d.dish.id 
      menuDic[str(d.dish.id)]['dishName'] = d.dish.name 
      menuDic[str(d.dish.id)]['dishPrice'] = d.dish.price 
menuArray.append(menuDic) 
return json.dumps(menuArray) 

これはDataJsonを取得し、配列にそれを置くために私のObjectiv-Cのコードです:

+0

本当にobjecive-c配列ですか?そして、あなたはこれらの価値観で何をしたいのですか? –

+0

異なるラベルとセルの行に挿入してください はい、それはobjectiv-cの配列です – socrateisabot

+0

高速列挙を使用しない理由はありますか? – Daniel

答えて

1

- (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent { 

switch (streamEvent) { 

    case NSStreamEventOpenCompleted: 
     [[ConnectionSingleton getInstance] setConnectionMade:YES]; 
     NSLog(@"Stream opened"); 
     break; 

    case NSStreamEventHasBytesAvailable: 
     if (theStream == inputStream) { 

      uint8_t buffer[1024]; 
      int len; 

      while ([inputStream hasBytesAvailable]) { 

       len = [inputStream read:buffer maxLength:sizeof(buffer)]; 

       if (len > 0) { 

        NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSASCIIStringEncoding]; 

        output = [output substringToIndex:[output length] - 2]; 

        if (nil != output) { 
         NSError* error;  // Obligatoir pour le JSON 

         menu = [NSJSONSerialization JSONObjectWithData:[output dataUsingEncoding:NSUTF8StringEncoding] options: 
            NSJSONReadingMutableContainers error:&error]; // Put Json in the Array 


         [[self tableView] reloadData]; // Reload Array to populate it 
        } 
       } 
      } 
     } 
     break;  

    case NSStreamEventErrorOccurred: 
     NSLog(@"Can not connect to the host!"); 
     break; 

    case NSStreamEventEndEncountered: 
     break; 

    default: 
     NSLog(@"Unknown event"); 
} 

} 
は、私は、これはトリックを行うべきだと思う

NSArray *firstArray = [NSArray arrayWithObjects:[NSArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5",@"6",nil], [NSArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5",@"6",nil],[NSArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5",@"6",nil],[NSArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5",@"6",nil],[NSArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5",@"6",nil],@"String",@"String",@"String",@"String",@"String",nil]; 

NSInteger count_i = firstArray.count; 
NSInteger count_j; 
id val; 
for (NSInteger i = 0; i < count_i; i++) { 
    if ([[firstArray objectAtIndex:i] isKindOfClass:[NSArray class]]) { 
     count_j = [[firstArray objectAtIndex:i] count]; 
     for (NSUInteger j = 0; j < count_j; j++) { 
      val = [[firstArray objectAtIndex:i] objectAtIndex:j]; 
      NSLog(@"%@",val); 
     } 
    }else{ 
     val = [firstArray objectAtIndex:i]; 
     NSLog(@"%@",val); 
    } 
} 

しかし、あなたの値は異なるタイプなので、jの値に応じて違う方法で扱わなければなりません。

+0

2番目の配列はどのようにして取得できますか? – socrateisabot

+0

申し訳ありませんが、私の悪い。私は私の答えを編集 –

+0

それは私がifステートメントを保持していません。私がそれを取り除くと、2番目のループでエラーが発生します。シグナルSIGABRT – socrateisabot