2010-12-01 13 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]を試してください。完了したら(日付ピッカーに渡した後に)、リリースします。 –

答えて

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

私はフォーマットをする必要がありますので、NSDateFormatterをDD/MM/YYYY 00:00:00しかし、時間をゼロに保つ方法はありますか? –

+0

時間をゼロにしてNSDateを作るにはどうすればいいですか?それはあなたが意味することですか? –

0

日付ピッカーがデフォルトであります今日の日付のみに設定します。手動で行う必要はありません。

+0

いいえ、そうではありません。 Interface Builderには1つあり、インスペクタに実際のプロパティがあります。インスペクタでは、開始日時を設定します。悲しいことに今日の自動日付オプションはありません。 –

+2

アップルのドキュメントを引用するには: "デフォルトは、UIDatePickerオブジェクトが作成された日付です。" http://developer.apple.com/library/ios/#documentation/uikit/reference/UIDatePicker_Class/Reference/UIDatePicker.html –

関連する問題