0

我正在开发应用程序并简单地编辑单元格文本字段并完成编辑,我正在尝试更新核心数据,但应用程序获取堆栈,有时它会给出 SIGSTOP,有时它说无法分配更多内存有点错误,请帮助我解决这个问题.

- (void)textFieldDidEndEditing:(UITextField *)textField
{
    if ((textField.tag - 999) > 0) {
        NSArray *visible = [self.productTable indexPathsForVisibleRows];
        UITableViewCell* cell = [self.productTable cellForRowAtIndexPath:[visible objectAtIndex:(textField.tag - 999)]];

        for (UIView* subview in [cell.contentView subviews]) {
            if ([subview isKindOfClass:[UITextField class]]) {
                textField = (UITextField*)subview;
                Product* myProduct        = (Product*)[self.productArray objectAtIndex:(textField.tag - 1000)];
                [myProduct setValue:[NSNumber numberWithFloat:[textField.text floatValue]] forKey:@"quantity"];
                [myProduct setValue:[NSNumber numberWithFloat:[myProduct.quantity floatValue] * [myProduct.rate floatValue]] forKey:@"amount"];
                NSLog(@"Product %@", myProduct);

                NSError *error; if (![self.managedObjectContext save:&error]) {
                    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
                    abort();
                }
            }
        }
    }
}
4

1 回答 1

0

看来您的子视图循环确实没有必要。
但是您对可见细胞的检查似乎存在缺陷。

  • 您将获得所有可见单元格的索引路径。
  • 您可以根据文本字段的标签选择这些索引路径之一。

--> 这会产生不可预知的结果。如果表格视图已滚动,则您的单元格在可见单元格数组中的确切索引不清楚。如果单元格已滚动到屏幕外,则数组将为空并且您会崩溃。

为什么这么复杂?
您需要的文本字段不正是传递给委托方法的文本字段吗?

你只需要这样:

UITableViewCell *cell = (UITableViewCell*) textField.superview.superview;
Product *myProduct = [self.fetchedResultsController objectAtIndexPath:
   [self.tableView indexPathForCell:cell]];

您正在使用NSFetchedResultsController,对吗?如果没有,你绝对应该!

于 2012-11-09T12:12:37.627 回答