将列表加载到 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
。
如果可能的话,我将如何实现?我以前从未做过这样的事情,所以我什至不确定在网上寻找什么。
任何关于这方面的指导将不胜感激。
- 创建一个简单数组并向其发送 [writeToFile:] 消息
(https://developer.apple.com/library/prerelease/ios/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/index.html#//apple_ref/occ/instm/NSArray/writeToFile:atomically:).
- 按 name/contents 搜索此文件。通过在您最喜欢的编辑器或什至 Xcode.
- 通过调用 NSArray arrayWithContentsOfFile: 的 class 方法在您的应用程序中加载此文件的内容。
- 通过调用方法 mutableCopy 创建数组的可变副本。
有关文件处理的更多信息,请参见 answer
我正在构建一个包含 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
。
如果可能的话,我将如何实现?我以前从未做过这样的事情,所以我什至不确定在网上寻找什么。
任何关于这方面的指导将不胜感激。
- 创建一个简单数组并向其发送 [writeToFile:] 消息 (https://developer.apple.com/library/prerelease/ios/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/index.html#//apple_ref/occ/instm/NSArray/writeToFile:atomically:).
- 按 name/contents 搜索此文件。通过在您最喜欢的编辑器或什至 Xcode.
- 通过调用 NSArray arrayWithContentsOfFile: 的 class 方法在您的应用程序中加载此文件的内容。
- 通过调用方法 mutableCopy 创建数组的可变副本。
有关文件处理的更多信息,请参见 answer