3

Plistに表示したいUITableView.以下のコードでは、1つのキー値を表示できますlist of states. しかし、私は3つのテーブルのすべての値を表示したい.

- (id)readPlist:(NSString *)fileName 
{
NSData *plistData;
NSString *error;
NSPropertyListFormat format;
id plist;

NSString *localizedPath = [[NSBundle mainBundle] pathForResource:fileName ofType:@"plist"];
plistData = [NSData dataWithContentsOfFile:localizedPath]; 

plist = [NSPropertyListSerialization propertyListFromData:plistData mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&error];
if (!plist) {
NSLog(@"Error reading plist from file '%s', error = '%s'", [localizedPath UTF8String],      [error UTF8String]);

}

return plist;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return [[[self readPlist:@"sample"] objectForKey:@"ListOfStates"] count];

}


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

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

cell.textLabel.text = [[[self readPlist:@"sample"] objectForKey:@"ListOfStates"] objectAtIndex:indexPath.row];

return cell;}

MY 出力にはlistofkeystates値のみが含まれます

画像を入力してくださいkeyで名前 を表示することも可能ですかvalues

4

3 に答える 3

4

多分テーブルセクションを使用してください...

-(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
    NSDictionary* dict = [self readPlist:@"sample"];
    return dict.allKeys.count;
}

-(NSString*) tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    NSDictionary* dict = [self readPlist:@"sample"];
    return [dict.allKeys objectAtIndex:section];
}

-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    NSDictionary* dict = [self readPlist:@"sample"];
    NSString* key = [dict.allKeys objectAtIndex:section];
    return [[dict valueForKey:key] count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    NSDictionary* dict = [self readPlist:@"sample"];
    NSString* key = [dict.allKeys objectAtIndex:indexPath.section];
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    cell.textLabel.text = [[dict objectForKey:key] objectAtIndex:indexPath.row];
    return cell;
}
于 2012-12-05T12:55:13.740 に答える
2

編集:いくつかのタイプミスを修正

アイデア

  1. plist を辞書に読み込む
  2. オプション: 並べ替え (!)
  3. 各セクションのデータ配列を作成する
  4. セクションの配列を作成します

次に、次のことを実装します

  1. viewDid load -> plist ファイルをディクショナリにロードし、セクションの配列とデータのディクショナリを作成します

  2. numberOfSectionsInTableView -> セクションの数。あなたの場合、キーの数

  3. numberOfRowsInSection -> 各セクションの行数

  4. titleForHeaderInSection -> 各セクションのセクションのタイトル

  5. cellForRowAtIndexPath -> すべての行のデータ

  6. sectionIndexTitlesForTableView -> すべてのセクション名を保持する配列。あなたの場合、すべてのキー

mySections というプロパティと myData というプロパティがあると仮定し、リサイクル識別子「Cell」を持つ標準セルでストーリーボードを使用すると仮定します

   @synthesize mySections
   @synthesize myData        

    - (void)viewDidLoad
    {
        [super viewDidLoad];

        //LOADING THE PLIST FILE

        //Create a string representing the file path
        NSString *plistPath = [bundle pathForResource:@"yourFilename" 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;
    }

   - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
   {
       //Return the number of sections.
       return [self.mySections count];
   }

   - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
   {
       // Return the number of rows in the section.
       NSString *key = [self.mySections objectAtIndex:section];
       NSArray *dataInSection = [self.myData objectForKey:key];
       return [dataInSection count];
  }

  -(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
 {
    NSUInteger section = [indexPath section];
    NSUInteger row = [indexPath row];

    NSString *key = [self.mySections objectAtIndex:section];
    NSArray *dataForSection = [self.myData objectForKey:key];

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

    cell.textLabel.text = [dataForSection objectAtIndex:row];

    return cell;
}
于 2012-12-05T13:12:45.523 に答える
2

データを取得してから使用してみNSDictionaryNSArrayくださいUITableView

NSString *file = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"plist"]; 
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:file]; 

次のような名前でtableValueを使用します...

NSArray *array = [dict objectForKey:@"ListOfStates"]; 
NSLog(@"%@", array);

これがあなたを助けることを願っています..

于 2012-12-05T12:53:34.303 に答える