使用CoreData / NSFetchedResultsController从PrepareForSegue使用String填充UISearchBar

时间:2014-03-05 13:53:21

标签: ios core-data uitableview uisearchbar nsfetchedresultscontroller

我有一个简单的应用程序,它是一个表视图(TV1),由用户点击导航栏中的加号按钮填充。用户进入“添加条目”屏幕,其中点击“名称”文本字段会显示另一个表视图(TV2),供用户添加现有条目,搜索现有条目或添加新条目。这非常有效,并且委托确保我在新的表视图(TV2)中选择的内容填充名称文本字段。

我想要实现的是另一种方式;如果用户已经填充了名称文本字段并单击它以显示TV2,我希望搜索栏已经填充了通过的字符串,同时确保搜索仍然有效。

例如,如果我有John的nameTextField,当我点击nameTextField并被带到TV2时,我希望searchBar.text说出John,但是现在搜索只显示带有John的条目这个名字,就像我开始输入名字John一样。

我正在使用Core Data和NSFetchedResultsController。

在添加条目的prepaeForSegue中,我这样做:

if ([self.nameTextField.text length] > 0)
{
    [envylopeNameTextFieldTableViewController setSelectedName:self.nameTextField.text];
}

在TV2中,setSelectedName方法是:

- (void)setSelectedName:(NSString *)selectedName
{
    _selectedName = selectedName;
    self.nameAddSearchBar.text = selectedName; 
    [self searchBar:self.nameAddSearchBar textDidChange:selectedName];
}

我的最后一行是我的试验,因为当我开始搜索时,该方法就被调用了,所以我想我可以称之为。我尝试了它没有它和self.nameAddSearchBar.text = self.selectedName和_selectedName并没有; searchBar没有填充。

使用断点,我可以看到selectedName = John和_selectedName = John,但是self.nameAddSearchBar.text = nil。

我可以想象我只有一两行代码,但我不确定如何继续。

任何帮助都会非常棒。

谢谢,

1 个答案:

答案 0 :(得分:1)

尝试移动

self.nameAddSearchBar.text = selectedName 

从setter(-setSelectedName)到TV2中的viewDidLoad。这里的问题是你在加载之前尝试分配nameAddSearchBar(一个视图)。

由于搜索栏是“视图”的一部分,因此在“viewDidLoad”之前它不可用。您可以使用正确的值设置selectedName属性,然后在加载视图后使用该值更新视图(搜索bar.txt)(在viewDidLoad中)。