Ios 向uiTableView添加新行
我正在尝试向Ios 向uiTableView添加新行,ios,Ios,我正在尝试向UITableView添加新行。用户在UIViewController上的UITextField中输入数据,控件返回原始UITableView。添加新行时向表写入的方法。我似乎什么都试过了。似乎什么都不管用 下面评论中的代码是: tableItems = [NSMutableArray arrayWithObjects:@"Persian", @"Rag Doll", @"Siamese", @"Scottish Fold", @"British short hair", n
UITableView
添加新行。用户在UIViewController
上的UITextField
中输入数据,控件返回原始UITableView
。添加新行时向表写入的方法。我似乎什么都试过了。似乎什么都不管用
下面评论中的代码是:
tableItems = [NSMutableArray arrayWithObjects:@"Persian", @"Rag Doll", @"Siamese", @"Scottish Fold", @"British short hair", nil];
[self.tableView reloadData];
}
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if([segue.identifier isEqualToString:@"AddSegue"])
{
UINavigationController *nav = segue.destinationViewController;
AddItemViewController *aivc = [nav.viewControllers objectAtIndex:0];
aivc.TVC = self;
}
}
如果将新行数据存储在UITableView访问的数组(例如)中,则只需按如下方式重新加载表:
[self.tableview reloadData];
如果将新行数据存储在UITableView访问的数组(例如)中,则只需按如下方式重新加载表:
[self.tableview reloadData];
我已经用您在对另一个答案的评论中提供的代码更新了您的问题 总之,您不会告诉我们在哪里生成异常,也不会告诉我们异常是什么。如果你希望我们帮忙,你需要缩小范围。此外,我不确定从以下事实得出什么结论:您认为异常是在输入
UITextField
并返回到上一个控制器后引起的,但您没有向我们显示该代码,而是向我们显示了切换到AddItemViewController
的代码。您是在第一次切换时收到错误,还是在尝试弹出/关闭以使用UITableView
返回视图控制器时收到错误
尽管有这些相当重要的问题,我还是建议两件事:
首先,确保您正在添加对结果的健壮检查,以防止发生异常。例如,一个常见的问题是从属性或NSArray
检索值,但出于这样或那样的原因,它不是代码假定的对象类型(并要求它是)。在本例中,您假设destinationViewController
是UINavigationController
,而且,您假设其viewControllers
数组中的第一个元素是AddItemViewController
。您知道您的代码,并且可能对这一事实很有信心,但是您得到异常的事实意味着您可能需要更健壮的错误检查
因此,我建议您包括NSAssert
语句来验证这一事实。以您的prepareForSegue
为例,我可能建议对其进行修改:
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if([segue.identifier isEqualToString:@"AddSegue"])
{
UINavigationController *nav = segue.destinationViewController;
NSAssert([nav isKindOfClass:[UINavigationController class]], @"destinationViewController is not a UINavigationController");
AddItemViewController *aivc = nav.viewControllers[0];
NSAssert([aivc isKindOfClass:[AddItemViewController class]], @"destinationViewController.viewControllers[0] is not a AddItemViewController");
aivc.TVC = self;
}
}
NSAssert
语句是在测试期间测试值的好方法,以确保返回的对象确实属于您认为属于的类。这些NSAssert
子句仅用于在开发过程中测试的错误,但不应出现在生产应用程序中。如果您的代码对方法返回的内容进行了隐式假设,那么您可以在调试应用程序时使用NSAssert
验证这些假设
现在,我没有理由知道nav
或aivc
的值是否是您的问题,但这是一个检查代码的示例。确保检索到的对象是正确的类型,这是一个很好的实践(尤其是在您努力寻找异常的情况下),其余代码都依赖于此
我有一个不可告人的动机。您的代码意味着您正在导航到一个视图控制器,该视图控制器本身嵌入到它自己的导航控制器中。你在叙述中从来没有说过那么多,所以这些NSAssert
语句只是验证了这一事实
其次,如果所有对象的健壮验证都没有发现问题,那么您必须自己确定异常的来源。通常您可以通过查看“调试导航器”中的堆栈跟踪或通过读取Xcode控制台中的错误来解译此异常。但是,另一个(未被充分认识的,IMHO)工具是,它可以找到导致异常的确切代码行。如果遇到任何异常,我将在“所有”异常上常规添加一个异常断点。这样,如果我通过我的调试器运行程序,如果它遇到异常,它将在出现问题的行停止代码,从而大大简化识别问题源的过程。它并不总是完美地工作,但它经常比其他技术更快地找到异常源
我已经用您在对另一个答案的评论中提供的代码更新了您的问题
总之,您不会告诉我们在哪里生成异常,也不会告诉我们异常是什么。如果你希望我们帮忙,你需要缩小范围。此外,我不确定从以下事实得出什么结论:您认为异常是在输入UITextField
并返回到上一个控制器后引起的,但您没有向我们显示该代码,而是向我们显示了切换到AddItemViewController
的代码。您是在第一次切换时收到错误,还是在尝试弹出/关闭以使用UITableView
返回视图控制器时收到错误
尽管有这些相当重要的问题,我还是建议两件事:
首先,确保您正在添加对结果的健壮检查,以防止发生异常。例如,一个常见的问题是从属性或NSArray
检索值,但出于这样或那样的原因,它不是代码假定的对象类型(并要求它是)。在本例中,您假设destinationViewController
是UINavigationController
,而且,您假设其viewControllers
数组中的第一个元素是AddItemViewController
。你知道你的密码,也许你被信任了