【问题标题】:Core data predicate for a calendar event app日历事件应用程序的核心数据谓词
【发布时间】:2015-09-08 17:44:42
【问题描述】:

我是一名新手程序员,我已经在这个问题上苦苦挣扎了两个星期。我正在使用来自 cocoapods 的 JTCalendar。它旨在返回- (BOOL)calendarHaveEvent:(JTCalendar *)calendar date:(NSDate *)date { 下的日期 它将在日历上显示为一个点以显示事件。为了保存我的活动,我使用以下代码:

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
                 NSManagedObjectContext *context = [appDelegate managedObjectContext];
NSManagedObject *savedate;
                 savedate = [NSEntityDescription insertNewObjectForEntityForName:@"AlarmData" inManagedObjectContext:context];
                 [savedate setValue:CT forKey:@"alarmDate"];

                 [context save:&error];

                BOOL isSaved = [appDelegate.managedObjectContext save:&error];

                 NSLog(@"success!!!!, %@", savedate);

以及以下尝试获取日期并“返回”它:

'

- (BOOL)calendarHaveEvent:(JTCalendar *)calendar date:(NSDate *)date
{
    AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
    NSManagedObjectContext *context = [appDelegate managedObjectContext];





    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"dd-MM-yyyy"];
    NSString *textDate = [NSString stringWithFormat:@"%@",[dateFormatter stringFromDate:[NSDate date]]];
    NSLog(@"Date %@",textDate);

     NSDate *startDate = [dateFormatter dateFromString:@"31-12-1981"];
    NSDate *endDate = [dateFormatter dateFromString:@"31-12-2999"];


    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(alarmDate >= %@) AND (date <= %@)", startDate, endDate];

    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    [request setEntity:[NSEntityDescription entityForName:@"AlarmData" inManagedObjectContext:context]];
    [request setPredicate:predicate];

    NSError *error;
    NSArray *matchingData = [context executeFetchRequest:request error:&error];

        NSString *alarmDate =  [ NSString  stringWithFormat:@"dd-MM-yyyy"];

        for (NSManagedObject *obj in matchingData) {
            alarmDate = [obj valueForKey:@"alarmDate"];

            return alarmDate;'

不幸的是,结果看起来像这样,每个日期似乎都返回了一个点:

https://drive.google.com/file/d/0Bw0Kf2Z9-yb8Zm5LWnZUUkRJRzQ/view?usp=sharing

我只想让我的单身约会回来,被困了很长时间。谢谢!

【问题讨论】:

  • 在使用 NSDateFormatter 处理非 UI 的任何内容时,请使用预定义的语言环境。如果你不这样做,系统将使用系统的,这可能是错误的来源。您可能还想检查请求错误。

标签: ios xcode core-data calendar nspredicate


【解决方案1】:
for (NSManagedObject *obj in matchingData) {
            alarmDate = [obj valueForKey:@"alarmDate"];

            return alarmDate;'

无论您的方法参数中有什么日期,您总是返回第一个对象的 alamrDate。使用您的参数检查日期,然后返回该日期是否有警报。

【讨论】:

    猜你喜欢
    • 2013-03-27
    • 2011-10-12
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 2014-04-01
    • 2013-08-05
    相关资源
    最近更新 更多