Segue在第一次点击时传递空值。之后完美运作。为什么?

时间:2013-02-02 03:49:44

标签: storyboard xcode4.5 segue

对于xcode(3周前开始学习),我是一个完整的菜鸟,PHP是我的事。无论如何,我正在尝试将一个值从MasterViewController传递给DetailViewController,当有人从一个桌面视图(用json文件中的数据填充)中点击一个单元格时。问题是我得到一个空值第一个时间。之后它完美地运作。

这是我的cellForRowAtIndexPath

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

FetchDetails* item = _feed.items[indexPath.row];

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

UILabel *itemTitle = (UILabel *)[cell viewWithTag:101];
itemTitle.text = [NSString stringWithFormat:@"%@", item.prodTitle];

UILabel *itemDate = (UILabel *)[cell viewWithTag:102];
itemDate.text = [NSString stringWithFormat:@"%@", item.prodDate];

UILabel *itemUser = (UILabel *)[cell viewWithTag:103];
itemUser.text = [NSString stringWithFormat:@"by %@", item.prodUser];

UIImageView *itemThumb = (UIImageView *)[cell viewWithTag:100];
itemThumb.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString: item.prodImage]]];
return cell;
}

didSelectRowAtIndexPath。 item.prodId是json的一部分,但未显示在原型单元格上。这是我在detailviewcontroller上需要的值

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
 FetchDetails* item = _feed.items[indexPath.row];
_selectedItem = [NSString stringWithFormat:@"%@", item.prodId];
}

还有prepareForSegue:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

if ([[segue identifier] isEqualToString:@"showItemDetail"]) {

    DetailViewController *destVieController = segue.destinationViewController;
    destVieController.passedValue = _selectedItem;
    NSLog(@"%@", _selectedItem);

  }
}

在完成几个教程后,我想出了所有这些代码。我不知道为什么它第一次不起作用并且在第二次点击时完美运行等等。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

解决了它。我不得不停止使用didSelectRowAtIndexpath并在prepareForSegue中执行所有操作。

这是我在segue上使用的代码:

    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:self.tableView.indexPathForSelectedRow];
    UILabel *label = (UILabel *)[cell viewWithTag:99];

    DetailViewController *detailVC = segue.destinationViewController;
    detailVC.passedId = [label text];

如您所见,我使用viewWithTag从标记的标签中获取了prodId。