如何在plist中存储图像路径?

时间:2013-04-25 18:58:09

标签: ios objective-c

我知道这可能是一个愚蠢的问题,但我将大部分游戏数据存储在一个plist中 - 我希望包含对我游戏中使用的图像的引用 - 与“支持文件”相同的层级。我有不同类型的图像存储在3个单独的文件夹中。例如,一个文件夹称为imageclue。我如何将路径存储在我的plist中,因为我不能将路径存储在plist中,因为我不能将路径存储为string-filename.jpg。我已经尝试获取文件的路径,但是当我将其注销时。

很抱歉,如果我没有很好地解释并提前感谢您的帮助:)

编辑**

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

enter image description here

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

希望这能清除我的意思,抱歉:)

3 个答案:

答案 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];