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
。你知道你的密码,也许你被信任了