2013-05-03 25 views
3

嗨,我是新來的這個coredata。我有兩個實體CategoryList和ExpenseList。所屬分類包括兩個屬性
1.dates(NSDate的)
2.categories(的NSString)
並與ExpenseList一對多的關係,關係的名稱是 「expenseList」 ExpenseList由 1.amountSpent(浮動)的。
我只是想知道學習關於coredata的關係特徵。當我試圖創建一個nspredicate來篩選特定日期的數據時,它不返回任何內容。我只想過濾CategoryList實體中的categories屬性內容以獲得特定的日期。這是我的代碼使用NSPredicate按日期過濾coredata不會返回任何內容

-(void) callingByDate 
{ 


NSManagedObjectContext *managedObjectContext = [self managedObjectContext]; 

NSEntityDescription *categoryL = [NSEntityDescription entityForName:@"CategoryList" inManagedObjectContext:managedObjectContext]; 

NSSortDescriptor *dateSort = [[NSSortDescriptor alloc]initWithKey:@"date" ascending:YES]; 

NSArray *sortDescriptors = [[NSArray alloc]initWithObjects:dateSort, nil]; 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"dates == %@",date]; 



NSFetchRequest *dateFetch = [[NSFetchRequest alloc]init]; 



[dateFetch setSortDescriptors:sortDescriptors]; 

[dateFetch setEntity:categoryL]; 

[dateFetch setPredicate:predicate]; 



NSMutableArray *results = [[managedObjectContext executeFetchRequest:dateFetch error:nil] mutableCopy]; 

if([results count] > 0) 

    NSLog(@"results found"); 

else 

    NSLog(@"no results found"); 

} 

當我在nslog區域執行此代碼時,它顯示'找不到結果'。我無法弄清楚爲什麼。在此先感謝

這裏是我的代碼,以查找結束一天

-(NSDate *)beginningOfDay:(NSDate *)date; 

{ 

NSDate *dat = [NSDate date]; 

NSCalendar *cal = [NSCalendar currentCalendar]; 

NSDateComponents *components = [cal components:(NSMonthCalendarUnit | NSYearCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:dat]; 

[components setHour:0]; 

[components setMinute:0]; 

[components setSecond:0]; 



return [cal dateFromComponents:components]; 





} 



-(NSDate *)endOfDay:(NSDate *)date; 

{ 

NSDate *dat = [NSDate date]; 

NSCalendar *cal = [NSCalendar currentCalendar]; 

NSDateComponents *components = [cal components:(NSMonthCalendarUnit | NSYearCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:dat]; 

[components setHour:23]; 

[components setMinute:59]; 

[components setSecond:59]; 



return [cal dateFromComponents:components]; 

時,我的NSLog的開始,其結果表現爲 startday指定-2013-04-30 18:30:00 +0000 endOfDay -2013-05-01 18:29:59 +0000

+0

@ user523234我會試試看。你能找到任何其他的錯誤,而不是這個。感謝您的回覆 – 2013-05-03 00:53:06

+0

你從來沒有實際聲明過什麼日期。 – sosborn 2013-05-03 01:00:08

+0

@sosborn是的,我做到了。我在viewDidLoad中聲明瞭這一點。 'date'字符串會給出當前設備的日期。 – 2013-05-03 01:09:55

回答

9

date實際上是一個時間戳,因此與==一起使用它只會返回具有該確切時間戳的項目。

要獲取特定日期的所有條目,你會想要得到的NSDate當天(startOfDay)開始,和NSDate當天(endOfDay)結束然後修改謂詞來獲得日期使用這些兩個值之間:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"dates >= %@ AND dates >= %@", startOfDay, endOfDay]; 

要計算startOfDayendOfDay你可以做手工,自己還是有你可以用它來計算它如https://github.com/erica/NSDate-Extensions一些其他庫。

+0

非常感謝,當我試圖在ns謂詞中明確給出2013-05-03這樣的日期時,效果很好。但是,當我試圖找到使用功能的一天的開始和結束時,問題依然存在。我用我的代碼更新了一天的開始和結束。在預期感謝 – 2013-05-03 15:50:18

+0

我找不到任何錯誤與功能找到一天的開始和結束。如果你能幫助我。非常感謝你 – 2013-05-04 08:56:30

+0

Predicate稍微修正,在日期之間獲得** **將日期> =%@'更改爲'日期<=%@' – Nazir 2015-09-17 10:14:45

0

我使用這個解決方案沒有時間在這種情況下,我的日期格式僅比較日期爲yyyy-MM-DD:

NSDateFormatter * formatter = [NSDateFormatter new]; 
[formatter setDateFormat:@"yyyy-MM-dd"]; 
NSString * dateString = [formatter stringFromDate:[NSDate date]; 
NSDate *rdate = [formatter dateFromString:dateString]; 

NSPredicate *datePre = [NSPredicate predicateWithFormat:@"date = %@", rdate]; 

您可以使用日期和時間都爲改變日期的格式。

相關問題