我一直在关注iOS开发的教程 - 特别是深入研究UITableViews。我已经建立了自己的自定义plist,但我似乎无法使用我的plist信息填充DetailViewController。我真的可以在这里使用一些帮助,我有点过头了!
编辑:以下是一些细节......
该应用程序通过plist-filled状态的RootViewController工作,这是一个UITableView。如果plist中没有任何子项,则会更改为Detail视图:
AppDelegate.m
NSDictionary *tempDict = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Data" ofType:@"plist"]];
self.data = tempDict;
RootViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
if(CurrentLevel == 0) { // At the 'root' of the plist
//Initilalize our table data source
NSArray *tempArray = [[NSArray alloc] init];
self.tableDataSource = tempArray;
AppDelegate *AppDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
self.tableDataSource = [AppDelegate.data objectForKey:@"Rows"];
self.navigationItem.title = @"PedalTome";
}
else
self.navigationItem.title = CurrentTitle;
}
稍后......
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
//Get the dictionary of the selected data source.
NSDictionary *dictionary = [self.tableDataSource objectAtIndex:indexPath.row];
//Get the children of the present item.
NSArray *Children = [dictionary objectForKey:@"Children"];
if([Children count] == 0) {
DetailViewController *dvController = [[DetailViewController alloc] initWithNibName:@"DetailView" bundle:[NSBundle mainBundle]];
[self.navigationController pushViewController:dvController animated:YES];
}
else {
//Prepare to tableview.
RootViewController *rvController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:[NSBundle mainBundle]];
//Increment the Current View
rvController.CurrentLevel += 1;
//Set the title;
rvController.CurrentTitle = [dictionary objectForKey:@"Title"];
//Push the new table view on the stack
[self.navigationController pushViewController:rvController animated:YES];
rvController.tableDataSource = Children;
}
}
我的DetailViewController.m
为空,占位符self.navigationController.title
除外。
如果我理解正确,我需要将信息从RootViewController
传递给DetailViewController
- plist的位置和实现,即plist中的索引级别(就是它所称的),和索引级别内的字符串(在明细键下)。
此时,任何进展都是惊人的进步。提前谢谢。
答案 0 :(得分:0)
您可以通过在DetailViewController
中设置合成媒体资源,然后在if-block中将数据传递给DetailViewController
,将所需信息传递给DetailViewController.h
。
例如,在您的@property (retain, nonatomic) NSDictionary *myAwesomeDictionary;
中,您将拥有以下内容(没有ARC):
@property (strong, nonatomic) NSDictionary *myAwesomeDictionary;
或者,启用ARC:
DetailViewController.m
然后在@synthesize myAwesomeDictionary;
中,您将拥有以下内容:
if([Children count] == 0) {
DetailViewController *dvController = [[DetailViewController alloc] initWithNibName:@"DetailView" bundle:[NSBundle mainBundle]];
[dvController setMyAwesomeDictionary:dictionary];
[self.navigationController pushViewController:dvController animated:YES];
}
然后您将代码块更改为以下内容:
NSDictionary
这假设您在上面创建了几行的dictionary
DetailViewController
是您希望在DetailViewController
中显示的数据。
然后,在viewDidLoad:
的{{1}}方法中,您可以使用self.myAwesomeDictionary
访问该词典,并执行您需要执行的操作。
声明:
在您的代码中,似乎有两件事违反了Apple的代码风格标准:
AppDelegate
存储您的模型(您的plist)。 - Apple说你不应该把你的AppDelegate
挤满全球数据/逻辑。通常,只编写与特定类中的类有关的代码。NSArray *Children
应为NSArray *children
,CurrentLevel
应为currentLevel
。只有班级名称的首字母大写。查看http://jlawr3nc3.github.com - 特别是我的CompanyRecords示例代码,了解如何创建类以及如何将plist解析为自定义对象的FunWithArrays。 MusicLibraryiOS然后深入探讨如何获取一个plist,将其解析为自定义对象,然后将其与详细视图一起显示在UITableView
中。
答案 1 :(得分:0)
Table View Specifier可以做你需要的。
指定表视图是指定了其内容的iOS表视图 通过plist文件。它的目的很大程度上是示范性的,但也是设计的 用于实时产品(对于信用页面有用)。可以搭配使用 iOS 4.2及更高版本。
通过他们的代码挖掘很可能具有启发性。