Storing image in plist

后端 未结 4 1652
暖寄归人
暖寄归人 2020-11-28 12:56

How can we store images in plist file. Where is this plist file stored? Can anyone give me an example? Answers will be greatly appreciated!

相关标签:
4条回答
  • 2020-11-28 13:38

    plist files are meant to store key-value pairs, not the resources of your application. The icons, images and forms are usually stored in a .xib file (see Interface Builder)

    0 讨论(0)
  • 2020-11-28 13:41

    Always store the image path in the .plist, never the actual image. If you do, you'll take a performance hit. You want to load images as you need them, not all at once.

    0 讨论(0)
  • 2020-11-28 13:52

    Depends on where and when these images are known to the application.

    For images as part of the application bundler, here may provide some insight. If you want to store images during the running of the application you can use the same concepts (user plist with relative paths to images).

    -- Frank

    0 讨论(0)
  • 2020-11-28 13:57

    The UIImage doesn't implement the NSCoder protocol directly that is necessary for storage in plists.

    But, it is fairly easy to add like below.

    UIImage+NSCoder.h

    #import <Foundation/Foundation.h>
    
    @interface UIImage (MyExtensions)
    - (void)encodeWithCoder:(NSCoder *)encoder;
    - (id)initWithCoder:(NSCoder *)decoder;
    @end
    

    UIImage+NSCoder.m

    #import "UIImage+NSCoder.h"
    
    @implementation UIImage (MyExtensions)
    
    - (void)encodeWithCoder:(NSCoder *)encoder
    {
      [encoder encodeDataObject:UIImagePNGRepresentation(self)];
    }
    
    - (id)initWithCoder:(NSCoder *)decoder
    {
      return [self initWithData:[decoder decodeDataObject]];
    }
    
    @end
    

    When this has been added you will be able to store UIImages in plist with ie

    // Get a full path to a plist within the Documents folder for the app
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                         NSUserDomainMask,
                                                         YES);
    NSString *path = [NSString stringWithFormat:@"%@/my.plist",
                                                  [paths objectAtIndex:0]];
    
    // Place an image in a dictionary that will be stored as a plist
    [dictionary setObject:image forKey:@"image"];
    
    // Write the dictionary to the filesystem as a plist
    [NSKeyedArchiver archiveRootObject:dictionary toFile:path];
    

    Note: I do not recommend doing this, unless you really want to, ie for really small images.

    0 讨论(0)
提交回复
热议问题