2011-03-07 91 views
5

也許你可以幫助我。有什麼不對這個代碼:iOS NSDate核心數據比較獲取請求不起作用

-(NSMutableArray *)returnItemsWithName:(NSString *)name{ 

    NSFetchRequest *fetch=[[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity=[NSEntityDescription entityForName:@"XYZ" inManagedObjectContext:[self managedObjectContext]]; 
    [fetch setEntity:entity]; 
    NSDate *sevenDaysAgo = [appDelegate dateByAddingDays:-7 toDate:[NSDate date]]; 
NSPredicate *pred= [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"originTime >= %@", sevenDaysAgo]]; 
    [fetch setPredicate:pred]; 
    NSError *fetchError=nil; 
    NSMutableArray *fetchedObjs = [[[self managedObjectContext] executeFetchRequest:fetch error:&fetchError] retain]; 
    if (fetchError!=nil) { 
     return nil; 
    } 

    return fetchedObjs; 

} 

fetchedObjs = [[[self managedObjectContext] executeFetchRequest:fetch error:&fetchError] retain]; 

崩潰,並顯示錯誤:

*終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',原因:「無法解析格式字符串「originTime> = 2011-02-28 21:07:37 +0000」'

所有的對象都不是零,也是originDat e是在CD數據庫中的NSDate

+0

是「originDate」還是「originTime」字段的名稱? – Anomie 2011-03-07 21:55:41

回答

10

你的問題是這樣的:

[NSPredicate predicateWithFormat:[NSString stringWithFormat:@"originTime >= %@", sevenDaysAgo]]; 

predicateWithFormat:已經想要一個格式字符串。這是沒有必要的,正如你發現的那樣,你做錯了什麼。這是很容易解決,雖然:

[NSPredicate predicateWithFormat:@"originTime >= %@", sevenDaysAgo]; 

,將工作就好了。

+0

是'originTime'這裏是一個類型爲NSDate的屬性?如果是,那麼格式謂詞是如何產生的? 我們不應該使用'laterDate:'函數嗎? '>'和'<'運算符是否適用於日期? – iosMentalist 2012-07-12 07:31:20