我很想知道最佳方法是什么:在编辑模式下创建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不能为零(崩溃问题已解决)
答案 0 :(得分:2)
更好的方法是使用"主队列"创建新的NSManagedObjectContext
。并发类型,并在其中对新创建或现有项目执行所有更改(通过将它们导入新上下文进行编辑)。
这样,您的主要上下文仍然可以保存对其的更改,而无需对仅部分填充的新对象进行更改。
并且,您可以通过简单地丢弃所有更改而不保存它来放弃所有更改。
上下文可以是主要上下文的子项,也可以通过通知报告更改。