将列表加载到 NSMutableArray 以填充 UITableViewController 的单元格

Loading a list into a NSMutableArray to populate cells of a UITableViewController

我正在构建一个包含 UITableViewController 语言列表的应用程序。例如,当我单击英语时,它会加载另一个 UITableViewController,其中包含该语言网站上可用的视频列表。这里的单元格将不同于单击法语。所以每个视频都有一个标题和一个 URL。我没有将视频保存在应用程序中;用户只需单击其中一个标题,它就会转到网站播放该视频。

大约有 1,100 个视频,所以放这些代码很痛苦。本质上,我从 prepareForSegue 调用 UITableViewController 并将显示多个单元格,具体取决于该语言的单元格数量。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSIndexPath *indexPath = [self.languagesTabTableView indexPathForCell:sender];
    [self.languagesTabTableView deselectRowAtIndexPath:indexPath animated:YES];

    if ([segue.identifier isEqualToString:@"ShowingLeafletsAndVideosSegueChinese"])
    {
        LeafletsAndVideosTableViewController *lvtvc = (LeafletsAndVideosTableViewController*)segue.destinationViewController;
        NSMutableArray *availableLeafletsToPass = [[NSMutableArray alloc] initWithObjects:@"3 Facts",@"10 Questions",nil];
        NSMutableArray *availableVideosToPass = [[NSMutableArray alloc] initWithObjects:@"1",@"2", nil];
        NSString *theSelectedLanguage = @"Chinese";
        // Calling the set methods on the LeafletsAndVideosTableViewController
        [lvtvc setAvailableLeaflets:availableLeafletsToPass];
        [lvtvc setAvailableVideos:availableVideosToPass];
        [lvtvc setSelectedLanguage:theSelectedLanguage];

    }
    else if ([segue.identifier isEqualToString:@"ShowingLeafletsAndVideosSegueEnglish"])
    {
        LeafletsAndVideosTableViewController *lvtvc = (LeafletsAndVideosTableViewController*)segue.destinationViewController;
        NSMutableArray *availableLeafletsToPass = [[NSMutableArray alloc] initWithObjects:@"3 Facts",nil];
        NSMutableArray *availableVideosToPass = [[NSMutableArray alloc] initWithObjects:@"Video 1",@"Video 2", @"Video 3", @"Video 4", @"Video 5", @"Video 6", nil];
        NSString *theSelectedLanguage = @"English";
        // Calling the set methods on the LeafletsAndVideosTableViewController
        [lvtvc setAvailableLeaflets:availableLeafletsToPass];
        [lvtvc setAvailableVideos:availableVideosToPass];
        [lvtvc setSelectedLanguage:theSelectedLanguage];
    }

所以 availableVideosToPass 被 "Titles" 填满,只要它不为零,它就会毫无问题地显示在 LeafletsAndVideosTableViewController 中。您在上面看到的只是一小部分;这些视频的标题要长得多,实际上分布在 1,100 个不同的视频中。那是 1,100 个不同的标题。

我对这个概念很陌生,我不想对这段代码做太多改动,但是有什么方法可以加载到文件中,例如文本文件或标题电子表格?英语选择总是会有 1,100 个标题,所以如果我基本上可以将文件加载到 NSMutableArray availableVideosToPass

如果可能的话,我将如何实现?我以前从未做过这样的事情,所以我什至不确定在网上寻找什么。

任何关于这方面的指导将不胜感激。

  1. 创建一个简单数组并向其发送 [writeToFile:] 消息 (https://developer.apple.com/library/prerelease/ios/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/index.html#//apple_ref/occ/instm/NSArray/writeToFile:atomically:).
  2. 按 name/contents 搜索此文件。通过在您最喜欢的编辑器或什至 Xcode.
  3. 通过调用 NSArray arrayWithContentsOfFile: 的 class 方法在您的应用程序中加载此文件的内容。
  4. 通过调用方法 mutableCopy 创建数组的可变副本。

    有关文件处理的更多信息,请参见 answer