CoreData基础知识帮助

时间:2010-11-29 17:47:21

标签: iphone objective-c ipad core-data uidatepicker

修改: 我按照建议更改了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项目的基础知识。

我添加了一个视图和一些不起作用的代码,呵呵。我基本上试图将一些文本保存到某个日期,然后当回到该日期时,之前保存的文本将再次显示。

4 个答案:

答案 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的实例。