保存并加载数据 - CoreData

时间:2010-11-14 12:08:56

标签: iphone ipad core-data save uidatepicker

我对CoreData很新,在我的iPhone应用程序中,我想知道如何保存一些文本,然后重新加载。但诀窍是,当UIDatePicker中的日期与以下时相同时将其加载回来我把它保存起来,就像日历一样。

希望你能提供帮助。非常重要的是我很快就会学会如何做到这一点,所以任何帮助都会受到大力赞赏,谢谢。

更新: 感谢您的回复,尤其是代码示例。但是我有一些问题可以理解它是如何组合在一起的,原谅我。我想知道它是如何工作的,但要让它在同一时间工作真的会有所帮助。

我理解其中许多错误,只是以正确的方式修复它才是我的问题。希望你能帮忙。

据推测,我把你的第一个代码块放在了完成编辑方法(保存时留下文本框),然后是日期改变方法中的第二个块(更改日期时加载)?

此代码是否使用实体和属性名称?我究竟需要如何设置我的xcdatamodel文件?我是否需要使用此代码,或者这只是演示我需要的实体和属性?

DatedText{
    savedText:String
    dateSaved:Date
}

这一行表示“mo”未声明:(已修复)

    newDatedText=mo=[NSEntityDescription insertNewObjectForEntityForName:@"DateText"
inManagedObjectContext:theManagedObjectContext];

大概在'someText'下面是我要保存的文字? 'aDateObject'是我的UIDatePicker中的日期?

[newDatedText setValue:someText forKey:@"savedText"];
    [newDatedText setValue:aDateObject forKey:@"dateSaved"];

请求成员'moc'不是结构或联合:

NSEntityDescription *testEntity=[NSEntityDescription entityForName:@"DatedText" inManagedObjectContext:self.moc];

什么是'targetDate'(未声明)? UIDatePicker再次约会?

NSPredicate *pred=[NSPredicate predicateWithFormat:@"dateSaved==%@", targetDate];

在非结构或联合的东西中请求成员'moc':

NSArray *fetchedObjs=[self.moc executeFetchRequest:theFetch error:&fetchError];

2 个答案:

答案 0 :(得分:3)

首先,您需要一个数据模型来反映您想要保存的内容,在本例中是一些文本和日期。所以:

DatedText{
    savedText:String
    dateSaved:Date
}

要创建新的DatedText对象(没有自定义类),请执行以下操作:

NSManagedObject *newDatedText;
newDatedText=[NSEntityDescription insertNewObjectForEntityForName:@"DateText" inManagedObjectContext:theManagedObjectContext];
[newDatedText setValue:someText forKey:@"savedText"];
[newDatedText setValue:aDateObject forKey:@"dateSaved"];

NSError *saveError=nil;
[theManagedObjectContext save:&saveError];
if (saveError!=nil) {
    NSLog(@"[%@ saveContext] Error saving context: Error=%@,details=%@",[self class], saveError,saveError.userInfo);
}

要检索具有特定日期的DatedText对象,请按以下方式创建提取:

NSFetchRequest *fetch=[[NSFetchRequest alloc] init];
NSEntityDescription *testEntity=[NSEntityDescription entityForName:@"DatedText" inManagedObjectContext:self.moc];
[fetch setEntity:testEntity]; 
NSPredicate *pred=[NSPredicate predicateWithFormat:@"dateSaved==%@", targetDate];
[fetch setPredicate:[NSArray arrayWithObject:pred]];

NSError *fetchError=nil;
NSArray *fetchedObjs=[theManagedObjectContext executeFetchRequest:theFetch error:&fetchError];
if (fetchError!=nil) {
    NSLog(@" fetchError=%@,details=%@",fetchError,fetchError.userInfo);
    return nil;
}

fetchedObjs现在将包含所有DatedText个对象的数组,其savedDatetargetDate相同。

答案 1 :(得分:2)

有关Core Data的大量资源,您可以按照以下链接进行学习。 http://developer.apple.com/library/ios/#documentation/DataManagement/Conceptual/iPhoneCoreData01/Introduction/Introduction.html适用于iOS的核心数据教程:这是非常棒的官方文档,易于学习,可下载源代码。 Any good guide about iPhone Core Data?之前有人问过同样的问题,你可以看看。