2010-12-01 17 views
0

J'ai une application qui enregistre le texte et la date d'un UIDatePicker, puis affiche cette note si vous êtes revenu dans cette date dans le UIDatePicker.DatePicker Arrêt CoreData Travail

Cela fonctionne très bien! Seulement, j'ai trouvé que le réglage de la date UIDatePicker à aujourd'hui arrête le travail de CoreData!

Ce n'est que lorsque j'exécute cette ligne setDate que les données de base ne peuvent plus fonctionner. L'application fonctionne bien sans se bloquer, elle n'enregistre aucune donnée. Si je commente cette ligne, c'est un charme. Mais j'ai besoin d'avoir UIDatePicker aujourd'hui quand l'application se charge.

J'utilise quand l'application démarre:

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

Ce iront chercher la note:

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"]; 

Et ceci pour enregistrer la note:

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); 
    } 
+0

Les dernières lignes de code affichées montrent que la méthode -save: renvoie une erreur si elle ne peut pas être sauvegardée. Voyez-vous une erreur? Si oui, * qu'est-ce que c'est? Si pas d'erreur, comment es-tu sûr que ça ne sauve rien? Comment * exactement * vérifiez-vous cela? En outre, votre premier bloc de code au démarrage de l'application semble divulguer une instance NSDate. Vous allou/init sans le libérer. Essayez [Date NSDate] pour renvoyer une instance autoreleased ou relâchez-la une fois que vous avez terminé (après l'avoir remis au sélecteur de date). –

Répondre

2

Rappelez-vous que NSDate enregistre non seulement JJ ​​/ MM/AAAA mais aussi HH: MM: SS. Je pense que lorsque vous choisissez un JJ/MM/AAAA dans le sélecteur, il enregistre avec une heure par défaut de 0:00:00, mais dans le cas ci-dessus lorsque vous définissez la date du sélecteur, vous êtes en fait manipuler le HH: MM: SS à autre chose (même si vous ne le voyez pas manuellement). Pour illustrer ce que j'essaie de dire, quand vous chercher est avec un prédicat de (dateSaved == picker.date), il cherche une date au format JJ/MM/AAAA 00:00:00 et Pour des raisons d'intérêt, vous l'avez peut-être enregistré le JJ/MM/AAAA 09:00:01.

Vous aurez besoin de faire une mise en forme de votre attribut NSDate si vous voulez que cela fonctionne.

+0

Je dois formater donc je me faire une sorte de NSDateFormatter avec un format de DD/MM/YYYY 00:00:00, mais comment garder l'heure à zéro? –

+0

Comment faire un NSDate en forçant le temps à zéro? C'est ce que vous vouliez dire? –

0

Datepicker est par défaut mis à la date d'aujourd'hui seulement. Vous n'avez pas besoin de le faire manuellement.

+0

Non, ce n'est pas le cas. J'en ai un dans Interface Builder et il a une propriété réelle dans l'inspecteur où vous définissez la date et l'heure à laquelle il commence. Pas d'option de date automatique d'aujourd'hui malheureusement. –

+2

Pour citer des documents Apple: "La valeur par défaut est la date à laquelle l'objet UIDatePicker est créé." http://developer.apple.com/library/ios/#documentation/uikit/reference/UIDatePicker_Class/Reference/UIDatePicker.html –