0

何千もの配列を含むplistがあり、各配列には51項目の辞書が含まれています。つまり、合計で約40,000のデータがUITableView正しく入力されています。約10を入力するとArrayUITableView行が表示されます。見晴らしが良いです...しかし、40アレイを超えると、奇妙UITableViewになります。理解することすらできません。 最初 。。

そして下にUITableViewあります。

秒

また、各セクションの行を拡張しようとしましたが、これも機能しません。どうすればよいですか。

コードを編集

-(void)ViewDidLoad
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"sam" ofType:@"plist"];

//Load the file in a dictionnary
NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:plistPath];

self.myData = dict;

//SORTING THE DICTIONARY    
NSArray *dicoArray = [[self.myData allKeys] sortedArrayUsingComparator:^(id firstObject, id secondObject) {
    return [((NSString *)firstObject) compare:((NSString *)secondObject) options: NSCaseInsensitiveSearch];
}];

self.mySections = dicoArray;

NSLog(@"path values%@",tableDict);


}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{



return [self.mySections count];



}

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

 if ([self tableView:tableView canCollapseSection:section])
 {
    if ([expandedSections containsIndex:section])
    {

NSString *key = [self.mySections objectAtIndex:section];
NSArray *dataInSection = [[self.myData objectForKey:key] objectAtIndex:0];
return [dataInSection count];
    }
    return 1;
  }
return 1;
  }


-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
NSString *key = [self.mySections objectAtIndex:section];
 return [NSString stringWithFormat:@"%@", key];
}


-(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
return self.mySections;
}



- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
}

// Configure the cell...

NSUInteger section = [indexPath section];
NSUInteger row = [indexPath row];



NSString *key = [self.mySections objectAtIndex:section];

NSDictionary *dataForSection = [[self.myData objectForKey:key] objectAtIndex:0];
NSArray *array=dataForSection.allKeys;

cell.textLabel.text = [[dataForSection allKeys] objectAtIndex:row];    
cell.detailTextLabel.text=[dataForSection valueForKey:[array objectAtIndex:indexPath.row]];

   return cell;     
 }

このコードは正常に機能します配列を少なくすると、51個の値を持つ10Arrayと言います...しかし、多く取ると...このような画面が表示されます

編集

 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
 <dict>
    <key>BUTTER,WITH SALT</key>
    <array>
        <dict>
            <key>Alpha_Carot_(µg)</key>
            <string>0</string>
            <key>Ash_(g)</key>
            <string>2.11</string>
            <key>Beta_Carot_(µg)</key>
            <string>158</string>
            <key>Beta_Crypt_(µg)</key>
            <string>0</string>
            <key>Calcium_(mg)</key>
            <string>24</string>
            <key>Carbohydrt_(g)</key>
            <string>0.06</string>
            <key>Cholestrl_(mg)</key>
            <string>215</string>
            <key>Choline_Tot_ (mg)</key>
            <string>18.8</string>
            <key>Copper_mg)</key>
            <string>0</string>
            <key>Energ_Kcal</key>
            <string>717</string>
            <key>FA_Mono_(g)</key>
            <string>21.021</string>
            <key>FA_Poly_(g)</key>
            <string>3.043</string>
            <key>FA_Sat_(g)</key>
            <string>51.368</string>
            <key>Fiber_TD_(g)</key>
            <string>0</string>
            <key>Folate_DFE_(µg)</key>
            <string>3</string>
            <key>Folate_Tot_(µg)</key>
            <string>3</string>
            <key>Folic_Acid_(µg)</key>
            <string>0</string>
            <key>Food_Folate_(µg)</key>
            <string>3</string>
            <key>GmWt_1</key>
            <string>227</string>
            <key>GmWt_2</key>
            <string>14.2</string>
            <key>GmWt_Desc1</key>
            <string>1 cup</string>
            <key>GmWt_Desc2</key>
            <string>1 tbsp</string>
            <key>Iron_(mg)</key>
            <string>0.02</string>
            <key>Lipid_Tot_(g)</key>
            <string>81.11</string>
            <key>Lut+Zea_ (µg)</key>
            <string>0</string>
            <key>Lycopene_(µg)</key>
            <string>0</string>
            <key>Magnesium_(mg)</key>
            <string>2</string>
            <key>Manganese_(mg)</key>
            <string>0</string>
            <key>Niacin_(mg)</key>
            <string>0.042</string>
            <key>Panto_Acid_mg)</key>
            <string>0.11</string>
            <key>Phosphorus_(mg)</key>
            <string>24</string>
            <key>Potassium_(mg)</key>
            <string>24</string>
            <key>Protein_(g)</key>
            <string>0.85</string>
            <key>Refuse_Pct</key>
            <string>0</string>
            <key>Retinol_(µg)</key>
            <string>671</string>
            <key>Riboflavin_(mg)</key>
            <string>0.034</string>
            <key>Selenium_(µg)</key>
            <string>1</string>
            <key>Sodium_(mg)</key>
            <string>714</string>
            <key>Sugar_Tot_(g)</key>
            <string>0.06</string>

        </dict>

    </array>
    <key>BUTTER,WHIPPED,WITH SALT</key>
    <array>
        <dict>
            <key>Alpha_Carot_(µg)</key>
            <string>0</string>
            <key>Ash_(g)</key>
            <string>2.11</string>
            <key>Beta_Carot_(µg)</key>
            <string>158</string>
            <key>Beta_Crypt_(µg)</key>
            <string>0</string>
            <key>Calcium_(mg)</key>
            <string>24</string>
            <key>Carbohydrt_(g)</key>
            <string>0.06</string>
            <key>Cholestrl_(mg)</key>
            <string>219</string>
            <key>Choline_Tot_ (mg)</key>
            <string>18.8</string>
            <key>Copper_mg)</key>
            <string>0.016</string>
            <key>Energ_Kcal</key>
            <string>717</string>
            <key>FA_Mono_(g)</key>
            <string>23.426</string>
            <key>FA_Poly_(g)</key>
            <string>3.012</string>
            <key>FA_Sat_(g)</key>
            <string>50.489</string>
            <key>Fiber_TD_(g)</key>
            <string>0</string>
            </dict></array>
      </dict></plist>
4

3 に答える 3

2

問題が何であるかがわかります。インデックスの選択範囲が大きすぎます。

これは、sectionIndexTitlesForTableView メソッドを削除することで削除できます。

本当にこれが必要な場合は、次のようにすべての文字列を数文字より大きくならないようにフォーマットできます。

-(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
    NSMutableArray *shorterArray = [[NSMutableArray alloc]init];
    for( NSString *sectionTitle in self.mySections ){
        NSString *shortSectionTitle;
        if( sectionTitle.length > 4 ){
            shortSectionTitle = [NSString stringWithFormat:@"%@..", [sectionTitle substringToIndex:4]];
        } else {
            shortSectionTitle = sectionTitle;
        }
        [shorterArray addObject:shortSectionTitle];
    }
    return shorterArray;
}

さらにサポートが必要な場合はお知らせください

于 2012-12-13T09:28:52.963 に答える
0
NSDictionary *dataForSection = [self.mySections objectAtIndex:section];
NSArray *array=dataForSection.allKeys;

cell.textLabel.text = [array objectAtIndex:row];    
cell.detailTextLabel.text=[dataForSection objectForKey:[array objectAtIndex:row]];
于 2012-12-13T07:15:58.930 に答える
-1

if (cell == nil) { } 条件を削除してみてください。つまり、cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease]; と宣言します。括弧の場合は外側。

于 2012-12-13T06:46:27.320 に答える