Вопрос по ios, iphone, nsdictionary, uitableview, ios4 – iOS Использование NSDictionary для загрузки данных в раздел и строки

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   ответа
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
Спасибо за это! Это помогло мне лучше понять, что делает NSDictionary! Большое спасибо! :)
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

О, я вижу, в этом разница между NSDictionary и NSMutableDictionary. Интересно почему .. Спасибо за ваш вклад :)
0

Как сказал A-Live, вам придется отсортировать ваш массив в изменяемый словарь массивов.

Следующий код должен работать, но он не проверен

В TableView Controller .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

}

Спасибо за вашу помощь! :) но я использовал ответ ниже. Спасибо все таки :)
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];
Извините, но у меня есть вопрос ... Пользовательский интерфейс работает хорошо, но когда я делал кнопку обновления для книг, я заметил, что хотя книги отсортированы по дате, кнопка перерабатывается, и я теряюсь при как установить метку для кнопки продления. Любой совет?:)
Спасибо ! Я использовал ваши коды в качестве руководства с некоторым редактированием, и он работает идеально, просто, как я хотел !!! СПАСИБО БОЛЬШОЕ!! : D
Лучше всего либо задать другой вопрос, либо осмотреться - я уверен, что существует множество ответов, касающихся повторного использования ячеек.

Похожие вопросы