最佳实践 - 在编辑模式下创建NSManagedObject

时间:2014-03-20 01:58:21

标签: core-data nsmanagedobject nsmanagedobjectcontext

我很想知道最佳方法是什么:在编辑模式下创建NSManagedObject。 我在想像

[NSEntityDescription insertNewObjectForEntityForName:nil inManagedObjectContext:managedObjectContext];
[self setEditing:YES animated:YES];

// Start editing the new object name.
WVGenericTableViewCell *cell = (WVGenericTableViewCell *)[self.tableView     cellForRowAtIndexPath:[self.fetchedResultsController objectAtIndexPath:indexPath]];
[cell makeNameFieldFirstResponder];

上述方案给了我以下问题:

1. Cell不会成为FirstResponder 2. - (BOOL)textFieldShouldEndEditing:(UITextField *)textField崩溃了我的应用

看起来像这样

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
//Get IndexPath From TextField
WVGenericTableViewCell *cell =(WVGenericTableViewCell *)   textField.superview.superview.superview;
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];

Ingredient *newIngredient = [self.fetchedResultsController objectAtIndexPath:indexPath];
newIngredient.name = textField.text;
//Save
[[self coreDataStack] saveManagedObjectContext];

return YES;
}


- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return NO;
}

任何建议或替代方案都将受到高度赞赏 如果有一个更优雅的方式请点IT OUT

编辑:好的

[NSEntityDescription insertNewObjectForEntityForName:nil inManagedObjectContext:managedObjectContext];

insertNewObjectForEntityForName不能为零(崩溃问题已解决)

1 个答案:

答案 0 :(得分:2)

更好的方法是使用"主队列"创建新的NSManagedObjectContext。并发类型,并在其中对新创建或现有项目执行所有更改(通过将它们导入新上下文进行编辑)。

这样,您的主要上下文仍然可以保存对其的更改,而无需对仅部分填充的新对象进行更改。 并且,您可以通过简单地丢弃所有更改而不保存它来放弃所有更改。

上下文可以是主要上下文的子项,也可以通过通知报告更改。