私のテーブル ビューでは、sqlite データベースから連絡先を NSmutableArray * (sort By Date)
*に取得し、それらを tableview に入力します。
したがって、最近追加された連絡先は常にテーブルの一番上に追加されます。
今私の要件は、セクションヘッダーを設定することです..次のように時間間隔を使用して、
1 Hour Ago, 1 Day ago , 1 week ago, 1 Month ago, 1 Year ago
そのように。
次のようにヘッダー文字列を取得するロジックを実装しました。
- (NSString *)interval {
NSDate *date = self.time; // self.time get from database for each contact insert time
double timeInterval = [date timeIntervalSinceNow];
NSString *tmpValue = nil;
timeInterval *= -1;
if(timeInterval < 3600*24) {
tmpValue = @"Today";
}
else if (timeInterval > 3600*24) {
int div = round(timeInterval / 60 / 60 / 24);
if (div ==1 && div <7)
//tmpValue= [NSString stringWithFormat:@"%d days ago", div];
tmpValue = @"This Week";
else if(div <30)
tmpValue = @"This Month";
else
tmpValue = @"Earlier";
}
NSLog(@"xxxyyyyyy%@",tmpValue);
return tmpValue;
}
次に、ビューの読み込みでヘッダー (日付インデックス) を取得し、ヘッダーのタイトルを次のように設定します。
// Implemented logic for Recent Contacts fetched from recent Ids in view will appear
//=================================================
recentContactsArray = [[NSMutableArray alloc] init];
datesArray = [[NSMutableArray alloc] init];
for(int i=0; i< storedRecentArray.count ; i++)
{
Recent *r = [storedRecentArray objectAtIndex:i];
NSMutableArray *recentContact = [DataBase selectContactsByRowId:r.recentRowId];
Contact *recentContactDict = [recentContact objectAtIndex:0];
[recentContactsArray addObject: recentContactDict ];
[datesArray addObject:[r interval]];
}
dateIndex = [[NSMutableArray alloc] init];
for (int i=0; i<[datesArray count]; i++)
{
//---get the date wise headers of each contactName---
NSString *dateHeader = [NSString stringWithFormat:@"%@", [datesArray objectAtIndex:i]];
//---add each date wise headers to the index array---
if (![dateIndex containsObject:dateHeader])
{
[dateIndex addObject:dateHeader];
}
}
NSLog(@"Date Insex array is xxxxxxxx %@", dateIndex);
// Set the section count as number of date indexes
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [dateIndex count];
}
// Set the section Header from date indexes
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
return [dateIndex objectAtIndex:section];
}
これでヘッダーは完全に設定されましたが、連絡先は両方のセクションで繰り返されます。連絡先は日付ごとにそれぞれのセクションに分けられません。
連絡先を述語する必要がありますsplit them in their respective sections using NSprecate like following example.
サンプル用に、すべての連絡先を頭文字でそれぞれのセクションに分割します
//---get all contactNames beginning with the letter---
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF beginswith[c] %@", alphabet];
NSArray *contacts = [contactsArray filteredArrayUsingPredicate:predicate];
if (isSearchOn)
{
contacts = [searchedNamesArray filteredArrayUsingPredicate:predicate];
}
//---return the number of contactNames beginning with the letter---
return [contacts count];
ここで、日付間隔をどのように述語する必要がありますか..
(1時間前 1日前 1週間前) 該当セル