我在我的应用程序中有这个tableview,它有一个特定的项目名称,如“Apple”。当用户点击所选项目时,他们将被定向到查看该所选项目的图像和描述的detailView。我当时想用plist来做这件事,但我不知道怎么做。请帮我。
我查看了一些来源,例如iCodeBlog,但他们并没有真正解释检索和保存这么好。也许你们人们也可以参考一些更好地描述这一点的链接。
这是我试过的一个plist。每个项目(Orange,Apple)都有我想在detailView中显示的数据。我基本上想要显示所显示的数据。
答案 0 :(得分:2)
这是一个示例视图控制器,可以执行您想要的操作。我将类命名为DetailViewController,并从应用程序资源中的Details.plist中加载了plist。图片也位于应用的资源中。
DetailViewController.h
#import <UIKit/UIKit.h>
@interface DetailViewController : UIViewController {
UILabel *description;
UIImageView *imageView;
NSString *selectedItem;
}
@property (nonatomic, retain) IBOutlet UILabel *description;
@property (nonatomic, retain) IBOutlet UIImageView *imageView;
@property (nonatomic, copy) NSString *selectedItem;
@end
DetailViewController.m
#import "DetailViewController.h"
@implementation DetailViewController
@synthesize description, imageView, selectedItem;
- (void)viewDidLoad {
NSDictionary *details = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Details" ofType:@"plist"]];
details = [details objectForKey:self.selectedItem];
self.description.text = [details objectForKey:@"description"];
self.imageView.image = [UIImage imageNamed:[details objectForKey:@"image"]];
}
@end
然后,您所要做的就是在加载视图之前更新selectedItem属性,并创建一个NIB文件,其描述标签和图像视图附加到其出口。
答案 1 :(得分:1)
将NSString
传递给详细信息视图并根据NSString加载项目。这可以是特定的字典名称,也可以是数组中的项目。
newDetailViewController.currentItem = @"Array1";
在我的详细视图中,定义:
.h
NSString *currentItem;
@property(nonatomic,retain) NSString *currentItem;
.m
@synthesize currentItem;
现在,您的detailView控制器中的currentItem
将是“Array1”,因为这是我们传递给它的。
这完全取决于你的plist是如何设置的,你使用的是NSArray
,NSDictionary
吗?
有很多方法可以使用它:
NSString *current = [NSString stringWithFormat:@"%@/%@",appDocsPath,currentItem];
NSMutableDictionary* dict = [[[NSMutableDictionary alloc] initWithContentsOfFile:current] autorelease];
编辑问题: 使用上面的例子:
aLabel.text = [dict objectForKey@"description"];
答案 2 :(得分:1)
Plists在很多情况下非常有用:
+ (NSMutableDictionary*) containerDictionary {
NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *finalPath = [path stringByAppendingPathComponent:@"ContainerGraphics.plist"];
NSMutableDictionary *plistData = [NSMutableDictionary dictionaryWithContentsOfFile:finalPath];
return plistData;
}
从我的应用包中加载一个名为“ContainerGraphics.plist”的plist文件(Property List)。
plist文件实际上只是一个XML文件。您可以通过选择“新文件” - &gt;在Xcode中构建一个。 “资源” - &gt; “财产清单”。
你并没有真正说出你不明白的是什么,所以如果有一些你难以理解的具体内容,请详细说明:)
编辑:
使用你发布的plist,使用我的上述方法“加载”plist文件。 然后它是NSDictionaries的NSDictionary ..
所以要去“Apple”字典:
NSDictionary *appleDictionary = [plistData objectForKey:@"Apple"];
这意味着什么 - 进入列表并检索“Apple”字典。
现在要获取图像和描述值:
NSString *imagePath = [appleDictionary objectForKey:@"image"];
NSString *descriptionString = [appleDictionary objectForKey:@"description"];
这几乎就是它的含义。
如果您有一个需要使用此数据填充的tableView,则会有一个问题! NSDictionary中的数据没有订单。因此,您不能像对tableView的数据数组那样引用[dictionary objectAtIndex:indexPath.row]。
然后你要做的就是先得到plistData,就像我的第一个例子一样。 (在viewDidLoad中执行此操作)。 然后从plistData字典中提取所有键 - 注意“顶级字典是特定的”,Apple,“Orange”等,而不是您想要硬编码到应用程序中的值。但是,这些词典中的词典是一般的,图像,描述......
所以:
NSArray *allKeys = [plistData allKeys];
allKey数组现在包含要访问plistData中的NSDictionaries的键(Apple,Orange等)。
在cellForRowAtIndexPath方法中,您现在可以:
NSDictionary *dictionaryForCurrentCell = [plistData objectForKey:[allKeys objectAtIndex:indexPath.row]];
[cell.textLabel setText:[dictionaryForCurrentCell objectForKey:@"image"]];
[cell.detailLabel setText:[dictionaryForCurrentCell objectForKey:@"description"]];
希望有所帮助:)
答案 3 :(得分:0)
在plist中创建一个数组,其中包含多个等于行数的项。在每个项目中创建一个名为description的字符串和一个名为image的字符串。获取didSelectRowAtIndex:
方法中所选行的编号。将字典存储在NSDictionary
[myDictionary initWithDictionary:[myArray objectAtIndex:indexPath.row]]
然后通过调用
获取imagestring
和描述字符串
[myDictionary objectForKey:@"image"]
并将这些字符串传递给详细视图。