2010-12-01 49 views
0

我有一個應用程序,它保存來自UIDatePicker的文本和日期,然後顯示該註釋,如果您在UIDatePicker中返回該日期。DatePicker停止CoreData工作

它的作品很棒!只有我發現將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); 
    } 
+0

您發佈的最後幾行代碼顯示如果無法保存,-save:方法將傳回錯誤。你看到一個錯誤?如果是這樣,*它是什麼*?如果沒有錯誤,你怎麼確定它沒有保存任何東西?你究竟如何驗證這個?此外,您在應用程序啓動時的第一個代碼塊似乎泄漏了一個NSDate實例。你分配/ init而不釋放它。嘗試[NSDate date]返回一個autoreleased實例,或者在完成後釋放它(在將它交給日期選擇器之後)。 – 2010-12-01 16:19:14

回答

2

記住NSDate不僅可以保存DD/MM/YYYY,還可以保存HH:MM:SS。

在猜測時,我認爲當您從選取器中選取DD/MM/YYYY時,它將以0:00:00的默認時間進行保存,但在上述情況下,當您將選取器日期設置爲現在時,操縱HH:MM:SS到別的東西(即使你沒有手動看到它)。

爲了說明我想說的是什麼,當您使用謂詞(dateSaved == picker.date)進行提取時,它正在以DD/MM/YYYY 00:00:00格式查找日期,並且爲了參數,你可能已經將它保存在DD/MM/YYYY 09:00:01。

如果你想使它工作,你需要對你的NSDate屬性進行一些格式化。

0

日期選擇器是默認僅設置爲今天的日期。你不需要手動完成。

+0

不,不。我在Interface Builder中有一個,它在檢查器中有一個實際屬性,您可以在其中設置啓動的日期和時間。不自動今天的日期選項。 – 2010-12-01 16:32:36

+2

引用Apple文檔:「默認值是創建UIDatePicker對象的日期。」 http://developer.apple.com/library/ios/#documentation/uikit/reference/UIDatePicker_Class/Reference/UIDatePicker.html – 2010-12-01 16:56:33