Iphone 在DetailView中使用plist

Iphone 在DetailView中使用plist,iphone,sdk,plist,tableview,Iphone,Sdk,Plist,Tableview,我的应用程序中有这个tableview,它有一个特定的项目名称,例如“Apple”。当用户点击所选项目时,他们将被引导到detailView,该detailView可查看所选项目的图像和说明。我想用普利斯特来做这个,但我不知道怎么做。请帮帮我 我查看了一些源代码,比如iCodeBlog,但它们并没有很好地解释检索和保存。也许你们也可以参考一些更好地描述这一点的链接 这是我试过的一种方法。每个项目(橙色、苹果色)都有我想在我的detailView中显示的数据。我基本上想显示显示的数据 在plist

我的应用程序中有这个tableview,它有一个特定的项目名称,例如“Apple”。当用户点击所选项目时,他们将被引导到detailView,该detailView可查看所选项目的图像和说明。我想用普利斯特来做这个,但我不知道怎么做。请帮帮我

我查看了一些源代码,比如iCodeBlog,但它们并没有很好地解释检索和保存。也许你们也可以参考一些更好地描述这一点的链接

这是我试过的一种方法。每个项目(橙色、苹果色)都有我想在我的detailView中显示的数据。我基本上想显示显示的数据


在plist中创建一个数组,数组中的项目数等于行数。在每个项目中创建一个名为description的字符串和一个名为image的字符串。在
didselectrowatinex:
方法中获取所选行的编号。将词典存储在
NSDictionary

[myDictionary initWithDictionary:[myArray objectAtIndex:indexPath.row]]

然后调用

[myDictionary objectForKey:@“image”]


并将这些字符串传递到详图视图

在plist中创建一个数组,数组中的项目数等于行数。在每个项目中创建一个名为description的字符串和一个名为image的字符串。在
didselectrowatinex:
方法中获取所选行的编号。将词典存储在
NSDictionary

[myDictionary initWithDictionary:[myArray objectAtIndex:indexPath.row]]

然后调用

[myDictionary objectForKey:@“image”]


并将这些字符串传递到详图视图

将一个
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"];

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"];

下面是一个示例视图控制器,它将执行您想要的操作。我将类命名为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

然后,您所要做的就是在加载视图之前更新selectedItem属性,并创建一个NIB文件,将描述标签和图像视图附加到它们的插座上。

下面是一个示例视图控制器,它将执行您想要的操作。我将类命名为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

然后,您只需在加载视图之前更新selectedItem属性,并创建一个NIB文件,将描述标签和图像视图附加到它们的插座上。

Plists在许多情况下非常有用:

+ (NSMutableDictionary*) containerDictionary {

    NSString *path = [[NSBundle mainBundle] bundlePath];
    NSString *finalPath = [path stringByAppendingPathComponent:@"ContainerGraphics.plist"];
    NSMutableDictionary *plistData = [NSMutableDictionary dictionaryWithContentsOfFile:finalPath];

    return plistData;

}
这将从我的应用程序包中加载名为“ContainerGraphics.plist”的plist文件(属性列表)

plist文件实际上只是一个XML文件。您可以通过选择“新建文件”->“资源”->“属性列表”在Xcode中构建一个

你并没有说你不明白的是什么,所以如果有什么你觉得难以理解的具体事情,请详细说明:)

编辑:

使用您发布的plist,使用我上面的方法“加载”plist文件。 那么它就是一本NSD字典

因此,要阅读“苹果”词典,您可以:

NSDictionary *appleDictionary = [plistData objectForKey:@"Apple"];
这意味着一些东西——进入列表并检索“苹果”词典

现在,要获取图像和描述值,请执行以下操作:

NSString *imagePath = [appleDictionary objectForKey:@"image"];
NSString *descriptionString = [appleDictionary objectForKey:@"description"];
这就是它的本质

如果您有一个需要填充此数据的tableView,则有一个陷阱! NSDictionary中的数据没有顺序。因此,不能像处理tableView的数据数组那样只引用[dictionary objectAtIndex:indexPath.row]

然后,您要做的是首先获取plistData,如我的第一个示例中所示。 (在viewDidLoad中执行此操作)。 然后从plistData字典中提取所有键-请注意,“顶级字典是特定的”、“苹果”、“橙色”等,而不是要硬编码到应用程序中的值。但是,这些词典中的词典是通用的、形象的、描述的

因此:

allKey数组现在包含用于访问plistData中NSDictionary的键(Apple、Orange等)

在cellForRowAtIndexPath方法中,您现在可以执行以下操作:

NSDictionary *dictionaryForCurrentCell = [plistData objectForKey:[allKeys objectAtIndex:indexPath.row]];
[cell.textLabel setText:[dictionaryForCurrentCell objectForKey:@"image"]];
[cell.detailLabel setText:[dictionaryForCurrentCell objectForKey:@"description"]];

希望它能有所帮助:)

Plists在很多情况下都非常有用:

+ (NSMutableDictionary*) containerDictionary {

    NSString *path = [[NSBundle mainBundle] bundlePath];
    NSString *finalPath = [path stringByAppendingPathComponent:@"ContainerGraphics.plist"];
    NSMutableDictionary *plistData = [NSMutableDictionary dictionaryWithContentsOfFile:finalPath];

    return plistData;

}
这将从我的应用程序包中加载名为“ContainerGraphics.plist”的plist文件(属性列表)

plist文件实际上只是一个XML文件。您可以通过选择“新建文件”->“资源”->“属性列表”在Xcode中构建一个

你并没有说你不明白的是什么,所以如果有什么你觉得难以理解的具体事情,请详细说明:)