1

我希望在行中显示带有日期的表格部分作为部分标题和书名。我完全不知道如何使用 NSDictionary 将数据加载到部分和行中。因此我的代码都搞砸了:(谁能提供一些帮助,以一些示例代码作为指导?我的 NSMutableArray 如下:

(
        {
        BIBNo = 187882;
        date = "14/08/2012";
        itemSequence = 000010;
        name = "Increasing confidence / Philippa Davies.";
        noOfRenewal = 0;
        number = 000187907;
        status = "Normal Loan";
        time = "24:00";
        type = Loans;
    },
        {
        BIBNo = 291054;
        date = "14/08/2012";
        itemSequence = 000010;
        name = "iPhone application development for IOS 4 / Duncan Campbell.";
        noOfRenewal = 2;
        number = 000291054;
        status = "Normal Loan";
        time = "24:00";
        type = Loans;
    },
        {
        BIBNo = 244441;
        date = "15/08/2012";
        itemSequence = 000010;
        name = "Coach : lessons on the game of life / Michael Lewis.";
        noOfRenewal = 1;
        number = 000244441;
        status = "Normal Loan";
        time = "24:00";
        type = Loans;
    },
        {
        BIBNo = 290408;
        date = "15/08/2012";
        itemSequence = 000010;
        name = "Sams teach yourself iPhone application development in 24 hours / John Ray.";
        noOfRenewal = 3;
        number = 000290408;
        status = "Normal Loan";
        time = "24:00";
        type = Loans;
    },
        {
        BIBNo = 161816;
        date = "16/08/2012";
        itemSequence = 000010;
        name = "Malaysian Q & As / compiled by Survey & Interview Department ; illustrations by Exodus.";
        noOfRenewal = 1;
        number = 000161817;
        status = "Normal Loan";
        time = "24:00";
        type = Loans;
    },
        {
        BIBNo = 187883;
        date = "16/08/2012";
        itemSequence = 000010;
        name = "Positive thinking / Susan Quilliam.";
        noOfRenewal = 3;
        number = 000187899;
        status = "Normal Loan";
        time = "24:00";
        type = Loans;
    }
)

我实际上如何将对象重新添加到 NSDictionary 中,以便将具有相同日期的对象存储在一起以在该部分中显示为行?请给我一些建议谢谢!T_T

4

4 回答 4

2
 - Dictionary of sections by date
  |
   --- array of row objects for the date1
  |    |
  |     --- row dictionary with the data to display
  |    |
  |     --- row dictionary with the data to display
  |    |
  |     --- row dictionary with the data to display
  |    |
  |     --- row dictionary with the data to display
  |
  |
  |
   --- array of row objects for the date2
  |    |
  |     --- row dictionary with the data to display
  |    |
  |     --- row dictionary with the data to display
  |    |
  |     --- row dictionary with the data to display
  |
  |
  |
  |
   --- array of row objects for the date3
       |
        --- row dictionary with the data to display
       |
        --- row dictionary with the data to display
       |
        --- row dictionary with the data to display
       |
        --- row dictionary with the data to display
       |
        --- row dictionary with the data to display
于 2012-07-26T16:41:42.227 回答
2

要处理您的数据,您需要执行类似的操作

NSMutableDictionary *dataSource = [[NSMutableDictionary alloc] init]; // This would need to be an ivar

for (NSDictionary *rawItem in rawItems) {
    NSString *date = [rawItem objectForKey:@"date"]; // Store in the dictionary using the data as the key

    NSMutableArray *section = [dataSource objectForKey:date]; // Grab the section that corresponds to the date

    if (!section) { // If there is no section then create one and add it to the dataSource
        section = [[NSMutableArray alloc] init];
        [dataSource setObject:section forKey:date];
    }

    [section addObject:rawItem]; // add your object
}

self.dataSource = dataSource;

然后获取章节标题

NSArray *sections =[[self.dataSource allKeys] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
return [sections objectAtIndexPath:indexPath.section];

然后在一个部分中获得一行

NSString *sectionTitle = // get the section title calling the above code
NSArray *items = [self.dataSource objectForKey:sectionTitle];

return [items objectAtIndex:indexPath.row];
于 2012-07-26T17:14:55.043 回答
0

简而言之,您不能将对象重新添加到 NSDictionary。那是因为 NSDictionary 是不可变的。一旦它被创建,它的内容就不能被修改。你想要的是一个 NSMutableDictionary。

然后,您可以使用 setObject: forKey: 方法。

[MyDict setObject:@"Normal Loan" forKey:@"status"];

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/nsmutabledictionary_Class/Reference/Reference.html

于 2012-07-26T16:40:53.210 回答
0

正如 A-Live 所说,您将不得不将您的数组排序到数组的可变字典中

以下代码应该可以工作,但未经测试

在 TableView 控制器 .h

@interface MyController:UITableViewController{
   NSMutableArray* dict;
   NSMutableArray* array;
}

在 MyController.m

-(void)initWithBooksArray:(NSArray*)bookArray{ //Or something similar

    self = [[super alloc] initWithStyle:UITableViewStylePlain];
    if(self){        
       dict = [[NSMutableDictionary alloc] init];
       array= [[NSMutableArray alloc] init];

       NSMutableArray* sectionArray;
       for(NSDictionary* bookDict in bookArray){

          date = [bookDict valueForKey:@"date"];
          sectionArray = [dict valueForKey:date];
          if(sectionArray){
             [sectionArray addObject:bookDict];
          }else{
             sectionArray = [[NSMutableArray arrayWithObject:bookDict];
             [dict addObject:sectionArray forKey:date];
          }
       }
       array = [[dict allKeys] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];

    }
    return self;
}

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
   return [dict count];
}

-(NSInterger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section{
   NSString* key = [array objectAtIndex:section];
   return [[dict objectForKey:key]count];
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
   return [array objectAtIndex:section];
}

...

// I'll leave it to apple's documentation (or someone else) to fill in the blanks on how to create cells

}

于 2012-07-26T17:20:00.537 回答