2013-01-07 48 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,而不是日期。