我有一个基于Core Data的应用程序,带有一个表视图控制器;用户按下导航栏中的加号按钮,它们以模态方式被带到视图控制器,在那里他们可以将信息输入到文本字段中。按“保存”按钮可保存此信息Core Data并将其显示在“表”视图中。
我已经配置了应用程序,这样当我点击一个单元格时,我就会进入一个成功传递信息的视图。
我想要实现的是重命名文本字段(例如,名称)并按Core Data中的Save updates THAT属性,而不是创建一个具有相同名称并保留旧名称的全新属性。
编辑视图控制器中的我的保存方法是:
- (IBAction)save:(id)sender
{
NSManagedObjectContext *context = [self managedObjectContext];
Transaction *transaction = [NSEntityDescription insertNewObjectForEntityForName:@"Transaction" inManagedObjectContext:context];
Item *itemType = [NSEntityDescription insertNewObjectForEntityForName:@"Item" inManagedObjectContext:context];
Person *enteredPerson = (Person *)[Person personWithName:self.editingNameTextField.text inManagedObjectContext:context];
transaction.whoBy = enteredPerson;
NSError *error = nil;
if (![context save:&error])
{
NSLog(@"Can't save! %@ %@", error, [error localizedDescription]);
}
}
哪个电话:
+ (Person *)personWithName:(NSString *)name inManagedObjectContext:(NSManagedObjectContext *)context
{
Person *person = nil;
// Creating a fetch request to check whether the name of the person already exists
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"];
request.predicate = [NSPredicate predicateWithFormat:@"name = %@", name];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
request.sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSError *error = nil;
NSArray *people = [context executeFetchRequest:request error:&error];
if (!people)
{
// Handle Error
}
else if (![people count])
{
// If the person count is 0 then let's create it
person = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:context];
person.name = name;
}
else
{
// If the object exists, just return the last object .
person = [people lastObject];
}
return person;
/*
for (Person *info in people)
{
NSLog(@"Names are: %@", person.name);
}
*/
}
所以,当我点击Jack的一个单元格时,它会向我显示Jack的所有信息。我想将Jack重命名为Jackie并更新Core Data for ALL“Jackie的交易”,但要覆盖Jack对象,而不是保留它并创建另一个名为Jackie。
对此有任何帮助将不胜感激!
答案 0 :(得分:0)
要重命名某人,您只需要获取该对象(使用旧名称)然后 更新名称属性。例如:
Person *person = [Person personWithName:oldName inManagedObjectContext:context];
person.name = newName;
所有与其他对象的关系(如交易等)都不会被修改。