【问题标题】:NSPredicate and NSDateNSPredicate 和 NSDate
【发布时间】:2013-01-07 14:20:11
【问题描述】:

我有两个NSDates,开始日期和结束日期。我想找到开始日期和结束日期之间的所有日期。我尝试了下面的代码,但出现以下错误:

-[__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]];

我不明白出了什么问题。任何帮助将不胜感激。

更新:

我的 m_maEvents 是一个 NSMutableArray,我的自定义 EventObjects 定义如下:

@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 对象和字符串,但不确定如何定义谓词。我认为它使用字符串进行比较,这就是我得到长度错误的原因。

我需要自定义比较方法吗?如果是这样,我还没有做过。

【问题讨论】:

标签: iphone objective-c ios xcode ipad


【解决方案1】:

希望它对你有用:

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 天))。

希望它对你有用。

【讨论】:

  • 虽然这很有趣,但它确实不能解决我的问题。我有一组日期,m_maEvents。我需要从中提取开始日期和结束日期之间日期的数组 (m_maEventsForMonth)。
【解决方案2】:

我的错……我所需要的只是在谓词语句中使用正确的属性。正确的属性是:dtDate,而不是日期。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-19
    • 2014-03-21
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多