2010-06-14 31 views
8

Tôi đang phát triển một Ứng dụng iPhone với CoreData. Một trong các thực thể của tôi có thuộc tính NSDate có tên là 'thời gian'. Nó lưu trữ thời gian đến phút/giây. Như phần của tôi, tôi muốn có ngày đến ngày. Vì vậy, nếu có mục '2010-06-14 8:00' và '2010-06-14 11:00', tôi muốn chúng được nhóm thành '2010-06-14'.iPhone CoreData: Cách nhóm các kết quả được tìm nạp theo ngày?

Hiện nay tôi chỉ cần sử dụng @ "thời gian" như sectionNameKeyPath tôi:

NSFetchedResultsController *aFetchedResultsController = 
    [[NSFetchedResultsController alloc] 
    initWithFetchRequest:fetchRequest 
    managedObjectContext:managedObjectContext 
    sectionNameKeyPath:@"time" 
    cacheName:@"Root"]; 

Có một thủ thuật để nhóm theo thời gian cho đến ngày? Hoặc tôi có phải sử dụng SQL thuần túy và một cái gì đó như "GROUP BY date(time, '%Y-%m-%d')"?

Trả lời

15

Giải quyết nó theo cách này:

Added phương pháp - (NSString *)day; đến lớp Entity của tôi với một thực hiện như thế này:

- (NSString *)day { 
    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
    dateFormatter.dateStyle = NSDateFormatterFullStyle; 

    return [dateFormatter stringFromDate:self.time]; 
} 

Sau đó, tôi sử dụng @"day" như sectionNameKeyPath trong việc khởi tạo aFetchedResultsController thay vì @"time" (xem ở trên).

+1

Chỉ cần tự hỏi: tại sao không trả lại chuỗi bằng 'self.time.components.day'? –

+1

Ngoài ra không có getter ghi đè biến mất khi bạn tạo lại lớp con 'NSManagedObject' cho thực thể của bạn? –

+1

@Matt thường là một phương pháp như thế này sẽ được trong một thể loại của thực thể, để tránh vấn đề đó. – brodney

Các vấn đề liên quan