2010-03-21 58 views

回答

8

UIImage不直接實現NSCoder協議所必需的存儲在的Plist。

但是,它很容易添加如下。

的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 

當這個已經加入,你將能夠存儲在plist中UIImages用即

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

注:我不建議這樣做,除非你真的想要,即真正的小圖像。

0

plist文件旨在存儲鍵值對,而不是應用程序的資源。圖標,圖像和表單通常存儲在.xib文件中(請參閱Interface Builder)

+1

非常感謝您的建議! – isarathg 2010-03-23 12:45:56

1

取決於應用程序已知這些圖像的位置和時間。

對於作爲應用程序打包程序的一部分的圖像,here可能會提供一些見解。如果您想在應用程序的運行中存儲圖像,則可以使用相同的概念(用戶使用相對路徑指向圖像)。

- 弗蘭克

4

始終將圖像路徑存儲在.plist中,而不是實際的圖像。如果你這樣做,你會得到一個表現。您想要根據需要加載圖像,而不是一次加載所有圖像。