8

Tôi đang sử dụng NSFetchedResultsControllerUITableViewController để điền UITableView từ cơ sở dữ liệu CoreData.NSPredicate và CoreData - quyết định xem thuộc tính Ngày là "hôm nay" (hoặc giữa đêm trước 12 giờ sáng đến tối nay 12 giờ sáng) trên iOS

Tôi có đối tượng NSDate được lưu vào thuộc tính Ngày này được gắn nhãn "startTime". Sau đó, tôi đang cố gắng để chỉ lấy dữ liệu ngày nay bằng cách sử dụng một NSPredicate trông như thế này:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"startDate == %@", 
          todaysDate]; 

tôi nhận được không có kết quả. Tôi hiểu điều này vì đối tượng NSDate chỉ giữ số giây hoặc mili giây hoặc bất kỳ điều gì kể từ ngày 1 tháng 1 năm 1970 phải không? Vì vậy, so sánh 1111111111111 và 1111111111112, trong khi trong cùng một ngày, là hai đối tượng riêng biệt NSDate không bằng nhau.

Vì vậy, làm thế nào để NSPredicate được định dạng sao cho nó có thể thực hiện được? Tôi sẽ đoán nó tạo ra hai đối tượng NSDate: một là lúc 12 giờ đêm qua, và một đối tượng khác cho 12 giờ tối nay và so sánh startDate và xem liệu nó giữa hai số này NSDate s.

Tôi là người mới thành NSPredicate, vậy làm thế nào điều này có thể được hoàn thành?

+0

Bạn nên đặt giải pháp của mình vào câu trả lời thay vì đặt câu trả lời bên trong câu hỏi. – yuji

+0

Không thể @yuji vì tôi chưa có đủ đại diện. –

+0

Có lẽ bạn có thể đặt ** giải pháp ** của bạn vào một câu trả lời. Trong khi chờ đợi tôi đã chỉnh sửa nó ra khi bạn đã chấp nhận câu trả lời của Yuji. Bạn có thể khôi phục giải pháp của mình bằng cách xem lịch sử sửa đổi. Cảm ơn. – Kev

Trả lời

24

Sử dụng NSCompoundPredicate.

NSPredicate *firstPredicate = [NSPredicate predicateWithFormat:@"startDate > %@", firstDate]; 
NSPredicate *secondPredicate = [NSPredicate predicateWithFormat:@"startDate < %@", secondDate]; 

NSPredicate *predicate = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:firstPredicate, secondPredicate, nil]]; 

Nơi firstDate là 12 giờ sáng nay và secondDate là 12 giờ tối nay.

P.S. Dưới đây là cách nhận được 12 giờ sáng nay:

NSCalendar *calendar = [NSCalendar calendar]; // gets default calendar 
NSCalendarComponents *components = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:[NSDate date]]; // gets the year, month, and day for today's date 
NSDate *firstDate = [calendar dateFromComponents:components]; // makes a new NSDate keeping only the year, month, and day 

Để nhận 12 giờ tối nay, hãy thay đổi components.day.

+1

Cảm ơn rất nhiều - vài lỗi nhỏ - vàPredicateWithSubpredicates (chữ thường P) và sử dụng NSDateComponents thay cho NSCalendarComponents – amergin

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