DatePicker, прекращающий работу CoreData - PullRequest
0 голосов
/ 01 декабря 2010

У меня есть приложение, которое сохраняет текст и дату из UIDatePicker, а затем показывает эту заметку, если вы вернулись к этой дате в UIDatePicker.

Отлично работает! Только я обнаружил, что установка даты UIDatePicker на сегодня останавливает работу CoreData!

Это только когда я запускаю эту строку setDate, это останавливает работу данных ядра. Приложение работает без сбоев, просто не сохраняет никаких данных. Если я прокомментирую эту строку, это работает шарм. Но мне нужно иметь UIDatePicker сегодня, когда приложение загружается.

Я использую это при запуске приложения:

NSDate *now = [[NSDate alloc] init];
[datePicker setDate:now];

Это для извлечения заметки:

NSFetchRequest *fetch = [[NSFetchRequest alloc] init];
        NSEntityDescription *testEntity = [NSEntityDescription entityForName:@"DatedText" inManagedObjectContext:self.managedObjectContext];
        [fetch setEntity:testEntity];
        NSPredicate *pred = [NSPredicate predicateWithFormat:@"dateSaved == %@", datePicker.date];
        [fetch setPredicate:pred];

        NSError *fetchError = nil;
        NSArray *fetchedObjs = [self.managedObjectContext executeFetchRequest:fetch error:&fetchError];
        if (fetchError != nil) {
            NSLog(@"fetchError = %@, details = %@",fetchError,fetchError.userInfo);
        }
        noteTextView.text = [[fetchedObjs objectAtIndex:0] valueForKey:@"savedText"];

И это, чтобы сохранить заметку:

NSManagedObject *newDatedText;
    newDatedText = [NSEntityDescription insertNewObjectForEntityForName:@"DatedText" inManagedObjectContext:self.managedObjectContext];
    [newDatedText setValue:noteTextView.text forKey:@"savedText"];
    [newDatedText setValue:datePicker.date forKey:@"dateSaved"];

    NSError *saveError = nil;
    [self.managedObjectContext save:&saveError];
    if (saveError != nil) {
        NSLog(@"[%@ saveContext] Error saving context: Error = %@, details = %@",[self class], saveError,saveError.userInfo);
    }

Ответы [ 2 ]

2 голосов
/ 02 декабря 2010

Помните, NSDate сохраняет не только ДД / ММ / ГГГГ, но также и ЧЧ: ММ: СС.

Возможно, я думаю, что когда вы выбираете ДД / ММ / ГГГГ из средства выбора, оно сохраняется по умолчаниювремя 0:00:00, но в вышеприведенном случае, когда вы устанавливаете дату выбора на настоящее время, вы фактически манипулируете HH: MM: SS чем-то другим (даже если вы не видите его вручную).

Чтобы проиллюстрировать то, что я пытаюсь сказать, когда вы выбираете с предикатом (dateSaved == picker.date), он ищет дату в формате DD / MM / YYYY 00:00:00 и для аргументов радивозможно, вы сохранили его в ДД / ММ / ГГГГ 09: 00: 01.

Вам нужно будет отформатировать атрибут NSDate, если вы хотите, чтобы это работало.

0 голосов
/ 01 декабря 2010

Datepicker по умолчанию установлен только на текущую дату.Вам не нужно делать это вручную.

...