2013-01-07 49 views
1

我有兩個NSDate s,開始日期和結束日期。我想查找開始和結束日期之間的所有日期。我想下面的代碼,但我得到了以下錯誤:NSPredicate和NSDate

-[__NSDate length]: unrecognized selector sent to instance 0xa484b30 

self.m_maEventsForMonth = [NSMutableArray array]; 
NSPredicate * sPredicate = [NSPredicate predicateWithFormat:@"(date >= %@) AND (date <= %@)", start, end]; 
[self.m_maEventsForMonth setArray:[m_maEvents filteredArrayUsingPredicate:sPredicate]]; 

我也試圖使開始和結束串如下,但是我得到錯誤的結果:

NSString * sDateStart = [self dateToString:start format:@"M/d/yyyy"]; 
NSString * sDateEnd = [self dateToString:end format:@"M/d/yyyy"]; 

self.m_maEventsForMonth = [NSMutableArray array]; 
NSPredicate * sPredicate = [NSPredicate predicateWithFormat:@"(date BETWEEN %@)", @[sDateStart, sDateEnd]]; 

[self.m_maEventsForMonth setArray:[m_maEvents filteredArrayUsingPredicate:sPredicate]]; 

我不明白是什麼是錯的。任何幫助,將不勝感激。

UPDATE:

我m_maEvents是定義我的自定義EventObjects一個NSMutableArray如下:

@interface EventObject : NSObject 
{ 
    NSString * title; 
    NSString * date; 
    NSString * starttime; 
    NSString * endtime; 
    NSString * location; 
    NSString * url; 
    NSMutableArray * m_EventTypes; 
    NSDate  * dtDate; 
} 

@property (nonatomic, retain) NSString * title; 
@property (nonatomic, retain) NSString * date; 
@property (nonatomic, retain) NSString * starttime; 
@property (nonatomic, retain) NSString * endtime; 
@property (nonatomic, retain) NSString * location; 
@property (nonatomic, retain) NSString * url; 
@property (strong, nonatomic) NSMutableArray * m_EventTypes; 
@property NSDate * dtDate; 

我初始化字符串,並在init()方法創建的NSDate對象,這些對象。這些都不重要,我的問題是我不知道如何定義謂詞來過濾兩個日期之間的日期。我有NSDate對象和字符串在我的處置,但不知道如何定義謂詞。我認爲它比較使用字符串,這就是爲什麼我得到長度錯誤。

我需要自定義比較方法嗎?如果是這樣,我還沒有做過。

+0

所以你有一個日期數組,你想要在2個日期之間的所有日期? –

+2

如何在數據模型中定義日期(哪種類型)? –

+0

更新了我的文章。 – LilMoke

回答

0

希望它爲你工作:

NSMutableArray dates = [NSMutableArray array]; 
NSDate *curDate = startDate; 
while([curDate timeIntervalSince1970] <= [endDate timeIntervalSince1970]) //you can also use the earlier-method 
{ 
    [dates addObject:curDate]; 
    curDate = [MSDate dateWithTimeInterval:86400 sinceDate:curDate]; 
} 

(請注意:86400 = 60 * 60 * 24(1天))。

希望它適合你。

+0

雖然這很有趣,但它確實沒有解決我的問題。我有一個日期數組,m_maEvents。我需要從開始日期和結束日期之間的日期數組(m_​​maEventsForMonth)中提取數據。 – LilMoke

0

我的不好...我需要的只是在謂詞語句中使用正確的屬性。正確的屬性是:dtDate,而不是日期。