用于在iPhone应用程序中显示N深度的分层数据的示例代码

Joh*_*ohn 2 iphone uitableview xcode4.2

在我之前的问题中,我能够确认我确实需要UITableViewController来显示我的iPhone应用程序的分层数据(使用XCode 4.2).

iOS开发 - 具有无限级别的uitableview

现在我想看看这样做的示例代码,它可以在XCode 4.2中运行.假设分层数据可以是2到300级之间的任何位置.

我在哪里可以看到这样的示例代码/示例项目?

编辑 - 我发现大多数教程似乎是旧版本的xcode.

Joe*_*oel 7

这个问题非常广泛,这项工作有很多部分.如果您将其分解为谨慎的步骤,那么您可以找到SO上每个步骤的示例代码,或者询问更具体的问题.如果您需要任何单独步骤的帮助,请发表评论,我可以为您提供指导,但这里有太多内容可以输入一个问题.

以下是我认为你需要解决这个项目的方法:

步骤1.创建数据结构

您将要为每个级别使用NSArray.NSArray可以存储NSDictionaries列表或您自己的自定义NSObject类.两者都有效.如果有标准化的数据结构,那么我建议您创建自己的对象,然后为数组中的每个条目存储该对象.它使得访问对象的属性比对每次访问进行字典查找更容易.当然,您存储在数组中的对象将需要另一个NSArray的字段,该字段将是它下面的子数组.例如,你可能有这样的事情:

@interface MyObject : NSObject {
    NSString *nodeTitle;
    NSString *nodeDescription;
    NSArray *childArray;
}

@property (nonatomic, copy) NSString *nodeTitle;
@property (nonatomic, copy) NSString *nodeDescription;
@property (nonatomic, copy) NSArray *childArray;
Run Code Online (Sandbox Code Playgroud)

在您的类的.m文件中,您将需要在init上将每个ivar设置为nil并在dealloc上释放每个ivar.

第2步.加载数据

您的Feed是在一个大批量中下来的,还是您可以从服务器一次请求一个级别?理想情况下,如果可以避免它,则不会将300个级别存储到内存中(这听起来像一个非常大的xml文件).理想情况下,当用户逐步进入层次结构时,您将加载每个级别.但也许每个节点上的数据量很少,您可以一步加载所有数据,而不是占用大量内存.你需要找出负载例程(一次性或按需).

第3步.展示您的数据

这实际上非常简单.创建一个使用表视图的视图控制器(UITableViewController或嵌入了UITableView的UIViewController).在视图控制器上为此ivar创建一个类型为NSArray的ivar和一个属性(复制它).然后,当您创建此视图控制器时,在将其推送到导航堆栈之前,将NSArray传递给当前级别.然后设置表视图以呈现作为属性传递给视图控制器的NSArray ivar.因此,例如当有人单击表中加载子级别的行时,请执行以下操作:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    int row = [indexPath row];
    MyViewController *childView = [[MyViewController alloc] init];
    childView.contentArray = ((MyObject *)[contentArray objectAtIndex:row]).childArray;
    [self.navigationController pushViewController:childView animated:YES]; 
    [childView release];     
}
Run Code Online (Sandbox Code Playgroud)

这假设您已为数组中的每个条目创建了名为MyObject的标准对象,并且它具有一个名为childArray的属性,该属性是下一级别的数组.

那就行了.