2016-03-31 8 views
2

uitableviewにデータを取り込みたいとします。私は別のカテゴリの異なるセクションを持っており、各カテゴリには異なる数の行が含まれています。セクションカテゴリのテーブルビューにデータを入力する

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
     return allCategory.count; 
} 

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 
    NSString *heading = [allCategory objectAtIndex:section]; 
    return heading; 
} 

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 
    int count = 0; 
    NSString *heading = [allCategory objectAtIndex:section]; 
    for (Product * cat in productArry) { 
     if ([cat.category containsString:heading]) { 

      count ++; 
     } 
    } 

    return count; 

} 

これは、カテゴリに基づいていくつかの行を返すコードです。 たとえば、2つの行数を返す1つの行番号とカテゴリ名 "ブロック"を返すカテゴリ名 "Engine"があります。今私は "cellForRowAtIndexPath"メソッドで各カテゴリにデータを設定したいと思います。各カテゴリに対して正しいデータを入力するにはどうすればよいですか?

+0

どのように多くの種類? – iOS

+0

推測する配列にX個のカテゴリが存在する可能性があります。 – Devster101

+0

Xカテゴリの量@DarjiJigar – salmancs43

答えて

1

オプション1:

- (Product *)dataForRowAtIndexPath:(NSIndexPath *)indexPath { 
    int count = 0; 
    NSString *heading = [self.allCategory objectAtIndex:indexPath.section]; 
    for (Product * product in self.productArry) { 
     if ([product.category containsString:heading]) { 
      if (count == indexPath.row) { 
       return product; 
      } 
      count++; 
     } 
    } 
    return nil; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    Product *product = [self dataForRowAtIndexPath:indexPath]; 
    return nil; 
} 

オプション2: それとも、フィルター配列

の.h

@property (nonatomic, strong) NSArray *allCategory; 
@property (nonatomic, strong) NSArray *productArry; 
@property (nonatomic, strong) NSArray *products; 

.M

- (NSArray *)products { 
    if (!_products) { 
     NSMutableArray *arrayCategoryProductArray = [[NSMutableArray alloc]init]; 
     for(int i =0 ;i< self.allCategory.count;i++){ 
      NSString *strCat = [self.allCategory objectAtIndex:i]; 
      NSArray *filteredarray = [self.productArry filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(category == %@)", strCat]]; 
      [arrayCategoryProductArray addObject : filteredarray]; 
     } 
     _products = arrayCategoryProductArray; 
    } 
    return _products; 
} 

入力

<__NSArrayI 0x7866c8b0>(
<Product: 0x78668460; category = A; name = A1>, 
<Product: 0x78663280; category = B; name = B1>, 
<Product: 0x7866c750; category = A; name = A2>, 
<Product: 0x7864c950; category = B; name = B2>, 
<Product: 0x786610a0; category = B; name = B3> 
) 

出力

ようにしたいこと
<__NSArrayM 0x798449b0>(
<__NSArrayI 0x79839050>(
<Product: 0x78668460; category = A; name = A1>, 
<Product: 0x7866c750; category = A; name = A2> 
) 
, 
<__NSArrayI 0x798c7310>(
<Product: 0x78663280; category = B; name = B1>, 
<Product: 0x7864c950; category = B; name = B2>, 
<Product: 0x786610a0; category = B; name = B3> 
) 
) 

ので、アレイ内のカテゴリの

- (Product *)dataForRowAtIndexPath:(NSIndexPath *)indexPath { 
    Product *product = [[self.products objectAtIndex:indexPath.section] objectAtIndex:indexPath.row]; 
    return product; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    Product *product = [self dataForRowAtIndexPath:indexPath]; 
    return nil; 
} 
+0

働いています......ありがとう@ tim007 – salmancs43

+0

オプション2は良いです – salmancs43

+0

' - (NSArray *)products'を書き直すと良いでしょう。ループで' filteredArrayUsingPredicate'を使ってもパフォーマンスは良くありません。 100以上のカテゴリを持ち、 'filteredArrayUsingPredicate'を100回実行します。単にproductArryをループして ' - (NSArray *)products'を生成する方が良いでしょう。 –

1

まずあなたは以下categories..Likeで配列を除外する必要があります...

NSMutableArray *arrayCategoryProductArray = [[NSMutableArray alloc]init]; 
for(int i =0 ;i< allCategory.count;i++){ 
    NSString *strCat = [allCategory objectAtIndex:0]; 
    NSArray *filteredarray = [productArry filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(category == %@)", strCat]]; 
    [arrayCategoryProductArray addObject : filteredarray]; 
} 
[YOUR_TBL reloadData]; 

は とテーブル方法で...あなたの条件に応じてフィルタを適用し、フィルタリングされた結果を確認してください....

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 

    NSArray *subDataArray = [arrayCategoryProductArray objectAtIndex:section]; 
    return subDataArray.count; 

} 
+0

私は既にカテゴリをフィルタリングしました...私はtableviewでデータを取り込みたいだけです。 @jinal – salmancs43

+0

それでは、上記のコードで表示するのは簡単です...特定のカテゴリのすべてのデータを1つにまとめることができます。 – Bhoomi

+1

あなたはこれを取得していますか? – Bhoomi

関連する問題