2012-11-09 22 views
0

我工作的应用程序,只需编辑单元格文本字段,并在完成编辑,我试图更新coredata但应用得到堆栈以及一些时间给它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(); 
       } 
      } 
     } 
    } 
} 
+0

任何人都可以帮助我呢? – Retro

+0

http://grab.by/howq。 “ – Retro

+1

”textField =(UITextField *)subview;“要覆盖委托的对象,尝试使用不同的指针(如*的UITextField = thisTextField(的UITextField *)子视图;) - 不知道如果是这样的问题(或者即使是故意的),但它是一个尝试。 – jimpic

回答

0

看来你的子视图循环确实没有必要。
但你已经检查可见细胞似乎有缺陷。

  • 您得到所有​​可见单元格的索引路径。
  • 你选择基于文本字段的标签,这些指数的路径之一。

- >这有不可预知的结果。如果表视图已滚动,则可见单元格数组中的单元格的确切索引不清晰。如果单元格已经从屏幕上滚动下来,数组将会是空的,并且会导致崩溃。

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

所有你需要的是这样的:

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

您使用的是NSFetchedResultsController,对不对?如果没有,你绝对应该!

+0

是的,我只是希望每当任何文本字段被编辑和完成编辑,然后我可以更新值。 plases告诉我一个更好的方法来做到这一点 – Retro

+0

@ user1653795看到我的编辑。 – Mundi

+0

不,我不是,PLZ指导我如何使用 – Retro