【发布时间】:2013-12-11 17:14:37
【问题描述】:
我有一个简单的应用程序,它由一个表格视图和一个加号按钮组成,用户可以模态地转到另一个视图控制器,在文本字段中添加一些文本并保存它。
将它保存在后端意味着保存到 Core Data,然后使用 NSFetchedResultsController 将其显示到表视图控制器。
型号是:
交易实体 日期实体 场合实体 人物实体
事务实体与其他实体有关系,因此 Person 的 NAME 属性将是 whoFrom.name。
添加新条目时一切正常,但在编辑时我被卡住了。我单击一个单元格并通过 prepareForSegue 设置视图控制器中的信息。名称文本字段具有输入的名称,事件文本字段具有输入的名称。
我希望能够干净地编辑它。
因此,如果用户将名称文本字段从 Jack 更改为 Bill,我希望它仅针对此单元格进行更改,而不是将每个 jack 更改为 bill。
所以要遵循以下逻辑:
- 将姓名从 Jack 更改为 Bill
- 如果 Bill 存在,则返回并将此交易添加到 Bill 的交易中
- 如果比尔不存在,则创建它。
- 如果 Jack 只有一个事务并且我将 Jack 重命名为 Bill,请确保从 Core Data 中删除“Jack”。
在保存新条目时,我已经有 1 和 2 的代码。
NSManagedObjectContext *context = [self managedObjectContext];
Transaction *transaction = [NSEntityDescription insertNewObjectForEntityForName:@"Transaction" inManagedObjectContext:context];
Person *enteredPerson = (Person *)[Person personWithName:self.nameTextField.text inManagedObjectContext:context];
transaction.whoBy = enteredPerson;
personWithName 是 Person NSManagedObjectSubclass 上的一个类别:
+ (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;
}
我一直在阅读教程并思考如何在我的编辑视图控制器或通常称为细节视图控制器的“保存”方法中执行此操作,但我只是不知道如何使其工作。
通过编辑,我不想创建新交易,我只想获取该交易的信息,更改名称或事件并再次保存。所以我无法想象我会将 insertNewObject 放入 DetailViewController 的保存方法中。
我是否分配一个新名称和一个旧名称,是否更新 transaction.whoBy 等?
我真的迷失了这个方向,所以任何朝着正确方向的推动都会非常有帮助;我知道我已经接近了,因为我上面用于添加新条目的保存方法已经成功地完成了返回用户(如果他存在)或创建一个用户(如果他不存在)的逻辑。
谢谢,
【问题讨论】:
标签: ios objective-c core-data uitableview nsfetchedresultscontroller