表视图疑惑

时间:2012-03-26 21:11:10

标签: objective-c ios5

我有一个类别表视图控制器。在我的应用中,类别可以包含子类别。

例如,衣服可以有3件,但也许书本上没有人可以直接拿到文章。

如何只实现一个类别的表视图控制器,如果点击的类别单元格有子类别,则重新加载新值?

这就是我所拥有的,但没有成功:

- (void) loadCategories{

    NSString *urlStr;

    if (self.subCategoria){

       urlStr =  [NSString stringWithFormat:@"http://webservic.es/articulos.php?idc=%@&store=0", self.subCategoria];
    }else{

       urlStr = @"http://webservices.es/articulos.php";

    }

    NSLog(@"URL:%@", urlStr);


    NSURL *url = [NSURL URLWithString:urlStr];

    NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url
                                                           cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
                                                       timeoutInterval:10.0];

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

         categoria *categoria = [self.categoriasArray objectAtIndex:self.tableView.indexPathForSelectedRow.row];

         if (categoria.subcategoria){
             self.subCategoria = categoria.subcategoria;
             [self viewDidAppear:YES];
             [self.tableView reloadData];
         }else{
             ArticulosController *articulosController =segue.destinationViewController;
             articulosController.id_categoria = categoria.id_categoria;

         }
  }

由于

1 个答案:

答案 0 :(得分:1)

有两种方法可以考虑您的问题。您想要一个TableViewController (可能还有多个它的实例),或者该类的单个实例吗?

我会说后者比它的价值更麻烦。该工具包不是以这种方式工作的,因此它为您提供的所有快捷方式都成为您必须自己完成的工作 - 而您从中获得的最佳效果是内存使用量的适度改进。 (更有可能你会引入错误,因为在重新配置相同的实例来表示不同的数据时很容易错过。)

另一方面,重用单个视图控制器类是该套件旨在帮助您的东西,并且因为听起来您已经在使用故事板,所以您已经到了一半。在prepareForSegue:sender:实现中,您将始终拥有destinationViewController - 所以您需要做的就是将其配置为表示子类别(通过设置其subcategory属性,它看起来像)。

(事实上,如果你正在使用故事板赛段,那么无论你喜欢与否,你都会为你创建新课程的实例......如果你真的想采用单身方法,你会必须放弃segue,这意味着你将失去内置的导航堆栈行为。)