1

私のテーブル ビューでは、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週間前) 該当セル

4

0 に答える 0