【问题标题】:UITableView+.plist+UINavigationController issueUITableView+.plist+UINavigationController 问题
【发布时间】:2011-10-05 21:10:37
【问题描述】:

作为我的第一个应用程序,我正在尝试掌握简单的基于导航的钱币收藏应用程序。

从 .plist 填充的数组中的索引存在一些问题。 Plist 有 191 条记录;普通国家列表 -> item 0 - String - Albania ... item 190 - String - Vanuatu。

我将这些记录读入我的临时数组以填充 UITableView。

NSString *countriesFile=[[NSBundle mainBundle]pathForResource:@"countries" ofType:@"plist"];
countries=[[NSArray alloc]initWithContentsOfFile:countriesFile];

这个表格视图有部分 -> 大陆。

好吧,我的问题是:

当推送到另一个笔尖时,它应该读取国家名称并显示在标题和标签中。确实如此,但仅适用于欧洲国家。如果我点击其他大陆的国家,我会看到一些欧洲国家。请看截图

点击欧洲国家 -> 比利时,显示正确。

转到非洲区:

攻克安哥拉,攻占奥地利。

因此,安哥拉的指数 - 92。奥地利 - 1。但奥地利和安哥拉都是其本土区域的第二个单元。

问题出在哪里?会是什么?

提前致谢。

【问题讨论】:

    标签: objective-c ios ios4


    【解决方案1】:

    我假设您使用-(void)tableView: (UITableView*)tableView didSelectRowAtIndexPath: (NSIndexPath*)indexPath 来判断您何时单击了列表中的某个项目? 另外,您是否使用[indexPath row](或indexPath.row)来计算您点击的行的索引?

    row 属性返回的是当前节中的行索引。它不返回整个表的绝对行索引。因此,无论您单击第一节中的索引二项还是第二节中的索引二项,row 在这两种情况下都会返回 2。

    一个想法是稍微更改 .plist 文件。与其只有一个长长的国家数组,不如有一个代表大陆的父数组。然后这个大陆数组中每个索引的对象,有另一个数组来保存国家列表。

    -(void)tableView: (UITableView*)tableView didSelectRowAtIndexPath: (NSIndexPath*)indexPath
    {
        NSUInteger section=[indexPath section];
        NSUInteger row=[indexPath row];
        NSString* countryName=[[plistArray objectAtIndex: section] objectAtIndex: row];
        //rest of code...
    }
    

    【讨论】:

    • 更改.plist 是什么意思?如何?数组 -> 集合?
    • 我的方法现在看起来像: - (void)tableView:(UITableView )tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { NSUInteger section=[indexPath section]; NSUInteger 行=[索引路径行]; NSString countryName=[[countries objectAtIndex: section] objectAtIndex: row]; SelectedCountry *selectedCountry = [[SelectedCountry alloc] initWithNibName:@"SelectedCountry" bundle:nil]; selectedCountry.selectedCountry = [countryName objectAtIndex:indexPath.row]; [self.navigationController pushViewController:selectedCountry 动画:YES]; 【选定国家发布】; }
    • 它现在说:'NSString 可能不响应'objectAtIndex''。我应该更改 var 类型吗?去什么?
    • 伙计们 ;-(,史蒂夫乔布斯去世了。今年最悲伤的新人。至少对我来说。安息吧
    • @Nathan 例如 .plist 文件:kendallp.net/public/files/stack.plist。检查您的方法应该是什么样的(某种)示例:kendallp.net/public/files/stack.m。如评论中所述,您将需要修改该方法,以便它可以读取 .plist 文件,因为我在上面对其进行了格式化。这有意义吗?
    【解决方案2】:

    听起来您没有考虑 indexPath 的部分值。 indexPath 有两部分,一个部分和一个行。在具有单个部分的表中,您通常只读取行值。在您的情况下,您似乎有一个分组表,因此您需要同时读取 indexPath.section 和 indexPath.row 以获取数据位置。

    【讨论】:

    • 每个大陆都是一个部分。所以第0节是欧洲。查看任何 UITable 文档。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    相关资源
    最近更新 更多