【问题标题】:Save and Load Data - CoreData保存和加载数据 - CoreData
【发布时间】:2011-05-09 19:25:38
【问题描述】:

我是 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];

【问题讨论】:

  • newDatedText=mo= 是我的回答中的错字。现已更正。
  • 好的,我想可能是这样。但我仍然不明白一些事情:b.imagehost.org/0718/Screen_shot_2010-11-17_at_22_59_14.png
  • 您一直试图将示例代码直接复制并粘贴到您的项目中。这是行不通的。我们无权访问您的项目,因此无法创建与您分配的变量名称相匹配的变量名称。我们只需要使用像DatedTexttargetDate这样的虚构名称。您应该将组成的变量名称更改为与您的项目匹配的名称。
  • 哦,我明白了,抱歉,我只是想弄清楚它们代表什么。

标签: iphone ipad core-data save uidatepicker


【解决方案1】:

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

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 对象的数组,这些对象具有与targetDate 相同的savedDate

【讨论】:

  • 感谢您的回复和出色的代码示例!我遇到了一些问题并编辑了我的原始帖子,你能看一下吗?
  • 花了这么多时间查看不同的代码并为此付出代价,回到这一点更有意义,但是关于托管对象上下文的一件事。它从何而来?我只需要申报一个吗?还是更复杂? 'theFetch' 不仅仅是你声明的'fetch'?
  • 使用其中一个 Xcode 模板项目来创建基于核心数据的应用程序。在应用程序委托类中,它将提供向您展示如何设置核心数据堆栈的方法。
【解决方案2】:

Core Data 有很多资源,你可以点击以下链接学习。 http://developer.apple.com/library/ios/#documentation/DataManagement/Conceptual/iPhoneCoreData01/Introduction/Introduction.html iOS 核心数据教程:真的很棒,官方文档,简单易学,可下载源代码。 Any good guide about iPhone Core Data?之前有人问过同样的问题,你可以看看。

【讨论】:

  • 这是提供链接而不是代码示例的问题。第一个链接已损坏。
猜你喜欢
  • 2014-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-19
  • 2020-01-22
  • 1970-01-01
相关资源
最近更新 更多