我知道这可能是一个愚蠢的问题,但我将大部分游戏数据存储在一个plist中 - 我希望包含对我游戏中使用的图像的引用 - 与“支持文件”相同的层级。我有不同类型的图像存储在3个单独的文件夹中。例如,一个文件夹称为imageclue。我如何将路径存储在我的plist中,因为我不能将路径存储在plist中,因为我不能将路径存储为string-filename.jpg。我已经尝试获取文件的路径,但是当我将其注销时。
很抱歉,如果我没有很好地解释并提前感谢您的帮助:)
编辑**
我有一个plist文件添加到我的程序中我不想以编程方式添加它,因为图像是常量 - 下面的屏幕截图显示了一个教程而不是filename.jpg(因为这不会被视为我的图像存储在一个文件中)我想知道我用什么路径名作为字符串。
该图片来自appcoda.com的教程 - 其中缩略图是图像路径文件。如果查看图像存储在左侧的位置 - 它们与程序文件一起存储。我的图像在那里的文件夹中,所以我对我的plist中为图像文件输入的内容感到困惑。
希望这能清除我的意思,抱歉:)
答案 0 :(得分:0)
这样做,
NSDictionary *imagePaths = @{@"image 1": [NSHomeDirectory() stringByAppendingPathComponent:@"image 1"]};
[self writeToPlist:imagePaths];
- (void)writeToPlist:imagePaths:(id)plist{
NSError *error;
NSData *data = [NSPropertyListSerialization dataWithPropertyList:plist format:kCFPropertyListXMLFormat_v1_0 options:0 error:&error];
if(error){
NSLog(@"Could not write to file");
return;
}
[data writeToFile:[self plistPath] atomically:YES];
}
像这样明智的加载很简单;
[self loadImagePathForImageNamed:@"image 1"];
- (NSString*)loadImagePathForImageNamed:(NSString*)imageName{
}
- (NSString*)loadImagePathForImageNamed:(NSString*)imageName{
NSData *data = [NSData dataWithContentsOfFile:[self plistPath]];
NSString *error;
NSPropertyListFormat format;
NSDictionary *dictionary = [NSPropertyListSerialization propertyListFromData:data mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&error];
if(error){
NSLog(@"Could not open plist %@", error);
return nil;
}
return dictionary[imageName];
}
当文件不存在时,您可能必须通过创建新错误来处理错误,否则这应该有效。
答案 1 :(得分:0)
在.h文件中存储三个变量
@interface YourViewController : UIViewController
{
NSString *folder1;
NSString *folder2;
NSString *folder3;
}
在viewdidload中:
-(void) viewdidLoad
{
//get the documents directory:
NSArray *paths = NSSearchPathForDirectoriesInDomains
(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
//getting the folder name:
folder1 = [NSString stringWithFormat:@"%@/imageclue",
documentsDirectory];
folder2 = [NSString stringWithFormat:@"%@/folder2",
documentsDirectory];
folder3 = [NSString stringWithFormat:@"%@/folder3",
documentsDirectory];
}
-(NSArray*) getPlistFromFolder:(NSString*)folder imageName:(NSString*)image
{
NSString *imageTitle = [NSString stringWithFormat:@"%@/image",
folder];
NSArray *data = [[NSArray alloc] initWithContentsOfFile:plistName];
return data;
}
因此在plist文件中,只需存储图像名称。
希望这会有所帮助......
答案 2 :(得分:0)
您正在以正确的方式存储路径,当您的图像在您的应用程序包中时,只需要在plist中存储带扩展名的图像文件名,为了更多参考,您可以定义关键名称而不是在plist中的“item1”,“item2”。
现在进入实际问题,如何从plist访问图像
第1步:从应用程序包中读取recipes.plist
NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"recipes" ofType:@"plist"];
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:bundlePath];
步骤2:现在从中获取要加载的图像/缩略图名称
步骤3:在Controller中定义以下功能,该功能从名称
返回图像- (UIImage *)getImageWithName:(NSString *)imageFileName
{
NSString *ext = [imageFileName pathExtension];
NSString *imagePath = [[NSBundle mainBundle] pathForResource:[imageFileName stringByDeletingPathExtension] ofType:ext];
return [UIImage imageWithContentsOfFile:imagePath];
}
如何使用
假设您要使用键“Item2”加载Image,然后编写以下代码
NSString *imageFileName = [[dict objectForKey:@"Thumbnail"] valueForKey:@"Item2"];
UIImage *item2Image = [self getImageWithName:imageFileName];
对于“Item6”
NSString *imageFileName1 = [[dict objectForKey:@"Thumbnail"] valueForKey:@"Item6"];
UIImage *item6Image = [self getImageWithName:imageFileName1];