たくさんの辞書を含むメイン配列があります。私がやりたいのは、割り当てられたタグに従ってすべての辞書を並べ替えることです。辞書は次のようになります。
date = "2012-12-04 20:26:04 +0000";
name = H;
tag = "#J";
メインアレイの外観は次のとおりです。
MAIN_ARRAY
- dict1
- dict2
- dict3
メイン配列を次のように並べ替えたい:
MAIN_ARRAY
- tag1
- dict1
- dict2
- tag2
- dict3
これが私のコードです:
-(NSArray *)returnTagContent {
NSArray *tags = [all valueForKey:@"tag"];
NSMutableArray *adoptTags = [[[NSMutableArray alloc] init] autorelease];
for (NSString *tagQuery in tags) {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"tag CONTAINS[cd] %@", tagQuery];
NSArray *roughArray = [all filteredArrayUsingPredicate:predicate];
NSArray *tagContent = [[NSSet setWithArray:roughArray] allObjects];
[adoptTags addObject:tagContent];
}
return adoptTags;
}
配列を返しますが、セクションヘッダーに整理したいと思います。これについてはどうすればよいですか?
また、セクションヘッダーのタイトルを返す際に問題が発生する別のコードがあります。
-(NSString *)returnTitleForTags {
NSString *uniqueTag = nil;
for (NSArray *tagContent in allTags) {
uniqueTag = [[[tagContent valueForKey:@"tag"] allObjects] lastObject];
}
return uniqueTag;
}
問題?まあ、それは配列のオブジェクトlastObject
を取得するための他のアイデアのせいです。NSString
更新:新しいコードが変更されました。
次のように、ボタンをクリックしたときにセクションを表示するように配列を更新します。
isTagFilterOn=YES;
[self loadSectionsArray];
[self.tableView reloadData];
ここにのコードがありますcellForRowAtIndexPath:
if (isTagFilterOn==YES) {
NSDictionary *dict = [[sectionsArray objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
cell.textLabel.text = [dict valueForKey:@"name"];
cell.detailTextLabel.text = [dict valueForKey:@"date"];
}
else {
NSString *object = all[indexPath.row];
cell.textLabel.text = [object valueForKey:@"name"];
cell.detailTextLabel.text = [object valueForKey:@"tag"];
}
残り
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
if (isTagFilterOn==YES) {
return [sectionsArray count];
}
else {
return 1;
}
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (isTagFilterOn==YES) {
return [[sectionsArray objectAtIndex:section] count];
}
return all.count;
}
-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
if (isTagFilterOn==YES) {
NSDictionary *dict = [[sectionsArray objectAtIndex:section] objectAtIndex:0];
return [dict objectForKey:@"tag"];
}
return nil;
}