CoreData对象更新问题

时间:2010-11-28 17:12:21

标签: iphone objective-c ipad core-data

我有这个代码示例演示了如何更新核心数据中的对象,但是我遇到了一个问题:

// Retrieve the context
if (managedObjectContext == nil) {
    managedObjectContext = [(YourAppNameAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
}

// Retrieve the entity from the local store -- much like a table in a database
NSEntityDescription *entity = [NSEntityDescription entityForName:@"YourEntityName" inManagedObjectContext:managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entity];

// Set the predicate -- much like a WHERE statement in a SQL database
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"YourIdentifyingObjectProperty == %@", yourIdentifyingQualifier];
[request setPredicate:predicate];

// Set the sorting -- mandatory, even if you're fetching a single record/object
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"yourIdentifyingQualifier" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
[sortDescriptors release]; sortDescriptors = nil;
[sortDescriptor release]; sortDescriptor = nil;

// Request the data -- NOTE, this assumes only one match, that 
// yourIdentifyingQualifier is unique. It just grabs the first object in the array. 
YourEntityName *thisYourEntityName = [[managedObjectContext executeFetchRequest:request error:&error] objectAtIndex:0];
[request release];
request = nil;

这一行:

YourEntityName *thisYourEntityName = [[managedObjectContext executeFetchRequest:request error:&error] objectAtIndex:0];

我不明白我应该使用什么代替'YourEntityName',从我收集到的形式来帮助我的是我必须使用实体名称来形成数据模型,但它似乎不起作用,我只是得到一个未申报的错误。

我有一个名为'Event'的实体,该实体有两个名为userNote和timeStamp的属性。

我正在使用核心数据进行基本上全新的清晰拆分视图ipad项目。我想在textViewDidEndEditing中运行它,所以当用户输入完笔记后,它会更新对象。

1 个答案:

答案 0 :(得分:2)

YourEntityName替换为用于表示您的实体的的名称。如果您已在Xcode中为实体声明了自定义类,请在此处指定该类。在您的情况下,听起来您没有为您的实体声明自定义类。在这种情况下,请使用NSManagedObject作为实体类。

在Xcode的数据模型编辑器中,您可以为实体指定名称和类。它们不是同一件事。实体名称用于引用如下语句中的实体:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:managedObjectContext];

实体类指定用于该实体的托管对象的类。使用Core Data时,开发人员通常会创建用于其实体的自定义类,但不需要这样做。如果您确实想为实体使用自定义类,则必须自己创建该类(作为NSManagedObject的子类)并在Xcode的数据模型编辑器中指定该类名。如果未指定自定义类,则NSManagedObject用于表示实体对象。