2012-02-07 52 views
12

Tôi muốn đặt hàng NSFetchRequest trước tiên theo ngày và sau đó, nếu nó khớp với cùng một thứ tự theo ngày theo tên. tôi sử dụng một UIDatePicker để có được ngày và lưu nó sử dụng Core DataSắp xếp NSFetchRequest theo ngày và sau đó theo thứ tự chữ cái

[self.managedObject setValue:self.datePicker.date forKey:self.keypath]; 

và sắp xếp các NSFetchRequest như thế này:

NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] initWithKey:@"day" ascending:NO]; 
NSSortDescriptor *sortDescriptor2 = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor1, sortDescriptor2, nil]; 
[fetchRequest setSortDescriptors:sortDescriptors]; 

Bây giờ vấn đề của tôi là nó chỉ được sắp xếp theo ngày và không theo tên bởi vì UIDatePicker được lưu trữ trong Dữ liệu cốt lõi vào ngày mà còn là giờ. Vì vậy, ngay cả khi cùng ngày, không được sắp xếp theo "tên" trong cùng một ngày bởi vì giờ là khác nhau. Vậy làm cách nào để lưu dữ liệu chính vào ngày tháng/ngày/năm và không phải là một giờ từ UIDatePicker?

Hoặc bạn có nghĩ ra giải pháp nào khác không?

+3

Bạn cần xóa thời gian khỏi ngày. http://stackoverflow.com/questions/4187478/truncate-nsdate-objective-c –

+0

bạn có cần thông tin thời gian cho bất kỳ điều gì khác không? Nếu không, bạn có thể đặt thành phần thời gian thành 0 khi đặt thời gian của đối tượng dữ liệu lõi. Nếu bạn cần nó, bạn phải thêm thuộc tính khác sử dụng NSDate không có thành phần thời gian hoặc chuỗi yyyymmdd. –

Trả lời

0

CoreData hỗ trợ NSDate, nhưng nó sẽ luôn bao gồm giờ. Điều duy nhất mà tôi có thể nghĩ đến là có một thuộc tính tùy chỉnh, chỉ đọc có dấu thời gian không bao gồm giờ và sau đó tạo bộ mô tả sắp xếp cho thuộc tính đó.

5

Sử dụng khối so sánh cho loại ngày của bạn để chuyển đổi ngày thành chuỗi có định dạng yyyyMMdd.

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"yyyyMMdd"]; 
NSSortDescriptor *sortDescriptor1 = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:NO comparator:^NSComparisonResult(NSDate *obj1, NSDate *obj2) { 
    return [[formatter stringFromDate:obj1] compare:[formatter stringFromDate:obj2]]; 
}]; 
NSSortDescriptor *sortDescriptor2 = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor1, sortDescriptor2, nil]; 
[fetchRequest setSortDescriptors:sortDescriptors]; 
Các vấn đề liên quan