修改: 我按照建议更改了NSPredicate,以便我的fetch代码看起来像这样。像这样打印到UITextView时,当我按下它时会吐出以下内容:
<NSManagedObject: 0x1c7cf0>(entity: DatedText; id: 0x1420c0 <x - coredata://B52D4F88-0210-4AE2-9DA6-C05ED64FE389/DatedText/p12> ; data: <fault>)
所以要么它没有获取任何数据数据,因为它没有正确保存/加载,或者我试图以不正确的方式将加载的结果导入UITextView。有什么想法吗?
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);
return nil;
}
NSString *object = [NSString stringWithFormat:@"%@",[fetchedObjs objectAtIndex:0]];
noteTextView.text = object;
我一直在解决如何使用Core Data的各种问题,所以我回到了使用核心数据的基于新窗口的ipad项目的基础知识。
我添加了一个视图和一些不起作用的代码,呵呵。我基本上试图将一些文本保存到某个日期,然后当回到该日期时,之前保存的文本将再次显示。
答案 0 :(得分:3)
iPhone开发者网站here上有一个教程。并且还有几个sample codes核心数据。这些应该让你开始。
答案 1 :(得分:2)
我检查了你的项目,除了必须合成CoreData属性之外,我还注意到你试图将NSArray分配给你的fetch谓词,但它实际上需要一个NSPredicate对象。你应该改用它:
NSPredicate *pred = [NSPredicate predicateWithFormat:@"(dateSaved == %@)", datePicker.date];
[fetch setPredicate:pred];
如果要设置多于一个谓词,则应在谓词字符串上执行此操作,即
NSPredicate *pred = [NSPredicate predicateWithFormat:@"(dateSaved == %@) AND (dateSaved <= %@", datePicker.date, [NSDate date]];
干杯, ROG
答案 2 :(得分:0)
您最有可能崩溃,因为您的ivar是managedObjectContext_
,但您使用的是self.managedObjectContext
。即使您提供自定义getter,您还需要合成核心数据ivars。
答案 3 :(得分:0)
您将NSFetchRequest的谓词设置为NSArray,而不是NSPredicate。
如果您发布了实际的崩溃,可能会说像未知的选择器被发送到NSArray的实例。