【发布时间】:2011-05-18 14:22:33
【问题描述】:
我有一个应用程序,它可以保存 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);
}
【问题讨论】:
-
您发布的最后几行代码表明 -save: 如果无法保存,方法将返回一个错误。你看到错误了吗?如果有,是什么?如果没有错误,你怎么确定它没有保存任何东西?您如何准确地验证这一点?此外,您在应用程序启动时的第一个代码块似乎泄漏了 NSDate 实例。你分配/初始化而不释放它。尝试 [NSDate date] 返回一个自动释放的实例,或者在你完成它之后释放它(在你把它交给日期选择器之后)。
标签: iphone objective-c ipad core-data uidatepicker