1

我知道这可能是一个愚蠢的问题,但我将我的大部分游戏数据存储在一个 plist 中——我想包括对我游戏中使用的图像的引用——与“支持文件”相同的层次结构。我有不同类型的图像存储在 3 个单独的文件夹中。例如,一个文件夹称为 imageclue。我怎么能将路径存储在我的 plist 中,我被卡住了,因为我不能将路径存储在我的 plist 中作为字符串 - 文件名.jpg。我已经尝试获取文件的路径,但是当我将其注销时。

抱歉,如果我解释得不好,请提前感谢您的帮助:)

编辑**

我有一个 plist 文件添加到我的程序中我不想以编程方式添加到它,因为图像是常量 - 下面的屏幕截图显示的是教程而不是 filename.jpg(因为当我的图像被存储时,这将不起作用在文件中)我想知道我使用什么路径名作为字符串。

在此处输入图像描述

该图像来自 appcoda.com 的教程 - 它说缩略图是图像路径文件。如果您查看左侧图像的存储位置 - 它们与程序文件一起存储。我的图像在那里的一个文件夹中,所以我对在我的 plist 中输入图像文件的内容感到困惑。

希望这能澄清我的意思,对不起:)

4

3 回答 3

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

当文件不存在时,您可能必须通过创建一个新文件来处理错误,否则这应该可以工作。

于 2013-04-25T19:33:10.860 回答
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 文件中,只存储图像名称。

希望这可以帮助...

于 2013-04-25T20:05:36.160 回答
0

您以正确的方式存储路径,当您的图像位于应用程序包中时,只需在 plist 中存储带有扩展名的图像文件名,以获取更多参考,您可以在 plist 中定义键名而不是“item1”、“item2”。

现在来到实际问题,如何从 plist 访问图像

recipes.plist第 1 步:从应用程序包中读取您的

NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"recipes" ofType:@"plist"];
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:bundlePath];

第 2 步:现在从中获取要加载的图像/缩略图名称

第 3 步:在控制器中定义以下函数,从名称返回图像

- (UIImage *)getImageWithName:(NSString *)imageFileName
{
    NSString *ext = [imageFileName pathExtension];
    NSString *imagePath = [[NSBundle mainBundle] pathForResource:[imageFileName stringByDeletingPathExtension] ofType:ext];
    return [UIImage imageWithContentsOfFile:imagePath];
}

如何使用

假设您要使用键“Item2”加载图像,然后编写以下代码

NSString *imageFileName = [[dict objectForKey:@"Thumbnail"] valueForKey:@"Item2"];
UIImage *item2Image = [self getImageWithName:imageFileName];

对于“第 6 项”

NSString *imageFileName1 = [[dict objectForKey:@"Thumbnail"] valueForKey:@"Item6"];
UIImage *item6Image = [self getImageWithName:imageFileName1];
于 2013-04-25T20:07:06.810 回答