iphone - 保存和加载数据 - CoreData

标签 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];

最佳答案

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

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 现在将包含与 targetDate 具有相同 savedDate 的所有 DatedText 对象的数组。

关于iphone - 保存和加载数据 - CoreData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4177398/

相关文章:

iphone - Cocos2d。一个带有粒子的 CCLayer 实例适用于很多场景?

ios - 请求非结构或联合中的成员 tableView

iphone - 未调用核心数据验证方法 - iPhone

iphone - 在 iOS 中使用应用内购买购买不同的应用

ios - 当应用程序处于终止状态而无需用户交互时,如何清除本地通知。

css - Android 和 iPad 都不尊重视口(viewport)

iphone - UIView只接受特定区域的触摸

iphone - 在不触发获取 Controller 委托(delegate)的情况下更改 NSManagedObject

javascript - iphone 的 safari touchmove 事件不工作

objective-c - iOS 设置切换开关第一次工作但不再工作