整理了我的 nsmutable字典



对这个字典进行排序的代码是什么:

{
        "a) Saudi Arabia" =     (
            "2012/06/04 Huge Sandstorm",
            "2011/03/30 Huge Sandstorm"
        );
        "b) Niger" =     (
            "2012/05/27 Huge Sandstorm"
        );
        "c) ****** QUATRE" =     (
            "2011/03/30 7Huge Sandstorm over niger",
            "2011/03/30 8Huge Sandstorm over niger",
        );
    }

为我的 UItableView ?

使用此代码,我的标题标题部分是有序的,但内容不是:

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    NSArray *allKeys = [[states allKeys] sortedArrayUsingSelector:@selector(compare:)];
    return [allKeys objectAtIndex:section];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";       
    UITableViewCell *cell = (UITableViewCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];           
    }
    NSArray *allKeys = [states allKeys] ;
    NSString *curKey = [allKeys objectAtIndex:indexPath.section];
    NSArray *curArray = [states objectForKey:curKey];
    curValue = [curArray objectAtIndex:indexPath.row];
    cell.textLabel.text = curValue; 
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;   
    [[cell textLabel] setFont:[UIFont systemFontOfSize:12.0]];
    return cell;  
}

有人可以帮我吗?

//使用此代码

 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
 {
     return [[states allKeys] count];//returns the number of key/object pairs
 }
 - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
 {
      NSArray *allKeys = [[states allKeys] sortedArrayUsingSelector:@selector(compare:)];
      return [allKeys objectAtIndex:section];
  }
  - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
       NSArray *allKeys = [[states allKeys] sortedArrayUsingSelector:@selector(compare:)];
       NSString *curKey = [allKeys objectAtIndex:section];
       NSArray *curArray = [states objectForKey:curKey];
       return [curArray count];
     }
     - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
          static NSString *CellIdentifier = @"Cell";
           UITableViewCell *cell = (UITableViewCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
     if (cell == nil) {
         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
     }
     // Configure the cell...
     //---------- CELL BACKGROUND IMAGE -----------------------------
     UIImageView *imageView = [[UIImageView alloc] initWithFrame:cell.frame];
     UIImage *image = [UIImage imageNamed:@"LightGrey.png"];
     imageView.image = image;
     cell.backgroundView = imageView;
     [[cell textLabel] setBackgroundColor:[UIColor clearColor]];
      [[cell detailTextLabel] setBackgroundColor:[UIColor clearColor]];

     NSArray *allKeys = [[states allKeys] sortedArrayUsingSelector:@selector(compare:)];
     NSString *curKey = [allKeys objectAtIndex:indexPath.section];
    NSArray *curArray = [[states objectForKey:curKey]     sortedArrayUsingSelector:@selector(compare:)];
     NSString *curValue=@"";
     if([curArray count]>indexPath.row) 
         curValue = [curArray objectAtIndex:indexPath.row];
   if(curValue)
       cell.textLabel.text = curValue;
     cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
     [[cell textLabel] setFont:[UIFont systemFontOfSize:12.0]];
     return cell;
 }
  - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
     return 60;
   }

也许它会帮助你

您正在按titleForHeaderInSection而不是cellForRowAtIndexPath对字典进行排序。

也许您可以在创建整个词典时对其进行排序,以节省在刷新UITableView时重新排序的麻烦。这样,您只需对其进行一次排序,然后键和值将始终以正确的顺序填充部分标题和单元格。

它在这里可能很有用。如果您有疑问,请告诉我。在调用表视图之前编写此代码。

 NSSortDescriptor *sortDesc = [[NSSortDescriptor alloc] initWithKey:@"birthDate" ascending:YES selector:@selector(compare:)]; //pass the key of your dictionary here
[allKeys sortUsingDescriptors:[NSArray arrayWithObject:sortDesc]];
您需要

curKey进行排序

NSArray *curArray = [states objectForKey:curKey];
//Add this line after currArray
NSArray *sorterCurArray = [curArray sortedArrayUsingSelector:@selector(compare:)];
//Use sorterCurArray instead
curValue = [sorterCurArray objectAtIndex:indexPath.row];
 write the same code in your cellForRowAtIndexPath: too for accessing key
NSArray *allKeys = [[states allKeys] sortedArrayUsingSelector:@selector(compare:)];
//
//  ViewController.m
//  StoryboardTutorial
//
//  Created by Kurry Tran on 10/20/11.
//  Copyright (c) 2011 __MyCompanyName__. All rights reserved.
//
#import "ViewController.h"
#import "DetailViewController.h"
@implementation ViewController
@synthesize states,datasource,curValue,sortedArray,descriptor;
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Release any cached data, images, etc that aren't in use.
}
#pragma mark - View lifecycle
- (void)viewDidLoad
{
    [self setupArray];
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}
-(void)setupArray{
    NSURL *myUrl=[NSURL URLWithString:@"the link with the dictionary"];
  //  NSString *str = [NSString stringWithContentsOfURL:myUrl usedEncoding:nil error:nil]; //load above string here
    NSMutableDictionary *dict=[NSMutableDictionary dictionaryWithContentsOfURL:myUrl];
//    NSString *str =@"# 2012/20110930 Huge Sandstorm over niger# just for the test/20110330 AHuge Sandstorm over niger/20110330 BHuge Sandstorm over niger";
//    NSArray * firstArry = [str componentsSeparatedByString:@"#"];
//    NSMutableArray *secondArry = [[NSMutableArray alloc] init]; //Will hold the # titles
//    NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; //Will hold the strings related to # title
//    for(NSString *firstArryStr in firstArry)
//    {
//        NSArray *tempArry = [firstArryStr componentsSeparatedByString:@"n"];
//        NSMutableArray *titleStingsArry = [[NSMutableArray alloc] init];
//        for (int i=0; i< [tempArry count];i++) {
//            if (i==0) {
//                NSString *title = [tempArry  objectAtIndex:i];
//                [secondArry addObject:title];
//                [dict setValue:titleStingsArry  forKey:title];
//            } else {
//                [titleStingsArry  addObject:[tempArry  objectAtIndex:i]];
//            }
//        } 
    NSLog(@"%@",dict);
//    }    
//    NSString *myString = @"20110330 AHuge Sandstorm over niger/20110330 BHuge Sandstorm over niger/20110330 CHuge Sandstorm over niger/20110330 1Huge Sandstorm over niger/20110330 2Huge Sandstorm over niger/20110330 3Huge Sandstorm over niger/20110330 4Huge Sandstorm over niger/20110330 5CHuge Sandstorm over niger/20110330 6Huge Sandstorm over niger";
//    NSArray *event = [myString componentsSeparatedByString:@"/"];
//    states = [NSMutableArray arrayWithArray:event];
    self.states = [NSMutableDictionary dictionaryWithDictionary: dict];
datasource = [dict allKeys];
    self.navigationItem.title = @"test";

}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return [states count];//returns the number of key/object pairs
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    NSArray *allKeys = [[states allKeys] sortedArrayUsingSelector:@selector(compare:)];
    return [allKeys objectAtIndex:section];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSArray *allKeys = [states allKeys];
    NSString *curKey = [allKeys objectAtIndex:section];
    NSArray *curArray = [states objectForKey:curKey];
    return [curArray count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = (UITableViewCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    }
    // Configure the cell...
    //---------- CELL BACKGROUND IMAGE -----------------------------
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:cell.frame];
    UIImage *image = [UIImage imageNamed:@"LightGrey.png"];
    imageView.image = image;
    cell.backgroundView = imageView;
    [[cell textLabel] setBackgroundColor:[UIColor clearColor]];
    [[cell detailTextLabel] setBackgroundColor:[UIColor clearColor]];

    NSArray *allKeys = [[states allKeys] sortedArrayUsingSelector:@selector(compare:)];
    NSString *curKey = [allKeys objectAtIndex:indexPath.section];
    NSArray *curArray = [states objectForKey:curKey];
    if([curArray count]>indexPath.row) curValue = [curArray objectAtIndex:indexPath.row];

    cell.textLabel.text = curValue;
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    [[cell textLabel] setFont:[UIFont systemFontOfSize:12.0]];
    return cell;
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    NSArray *allKeys = [states allKeys];
    NSString *curKey = [allKeys objectAtIndex:indexPath.section];
    NSArray *curArray = [states objectForKey:curKey];
    curValue = [curArray objectAtIndex:indexPath.row];
    DetailViewController *detail = [self.storyboard instantiateViewControllerWithIdentifier:@"detail"];
    // detail.state = [states objectAtIndex:indexPath.row];
    detail.state = curValue;
    [self.navigationController pushViewController:detail animated:YES];
}
//- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
//{
//    //normal cell acquisition code
//    
//    NSArray *allKeys = [states allKeys];
//    NSString *curKey = [allKeys objectAtIndex:indexPath.section];
//    NSArray *curArray = [states objectForKey:curKey];
//    NSString *curValue = [curArray objectAtIndex:indexPath.row];
//    //Do something with the string
//
//}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    return 60;
}
- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}
- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
}
- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
}
- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
}
- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
@end

最新更新