我想寫一個具有所有相同類型的自定義對象的字典到緩存目錄中。我不知道什麼是錯,但沒有寫。 writeToFile
返回false。當我需要保存一個用戶實例時,這是行得通的,但現在我需要一本字典。字典鍵是字符串。奇怪的是initWithCoder
和encodeWithCoder
根本沒有被調用。無法將字典寫入緩存
我得到這樣
NSString * NSCacheDirectory()
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cacheDirectory = [paths objectAtIndex:0];
#ifdef DEBUG
NSString *regi = [NSHomeDirectory() stringByAppendingPathComponent: @"/Library/Caches/"];
#endif
return cacheDirectory;
//return [NSHomeDirectory() stringByAppendingPathComponent: @"/Library/Caches/"];
}
緩存文件夾中保存我這樣一個字典:
+(void) saveSharedUsers {
NSString *cacheDir = NSCacheDirectory();
NSFileManager *fm = [[NSFileManager alloc] init];
Boolean success = true;
NSError *error = nil;
if (![fm fileExistsAtPath: cacheDir ])
success = [fm createDirectoryAtPath: cacheDir withIntermediateDirectories: true attributes: nil error: &error];
success = [[User sharedUsers] writeToFile: [NSCacheDirectory() stringByAppendingPathComponent: USER_FILE] atomically: true];
[fm release];
}
用戶對象:
@interface User : NSObject <NSCoding> {
NSString *email;
NSInteger userId;
NSString *name;
NSString *facebookId;
}
@property(nonatomic, copy) NSString *email;
@property(nonatomic, assign) NSInteger userId;
@property(nonatomic, copy) NSString *name;
@property(nonatomic, copy) NSString *facebookId;
...
@end
@implementation User
...
@synthesize email,userId,name, facebookId;
- (void) encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject: self.name forKey:@"name"];
[aCoder encodeObject: self.email forKey:@"email"];
[aCoder encodeObject: self.facebookId forKey:@"facebookId"];
[aCoder encodeInteger: self.userId forKey: @"userId"];
}
- (id) initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if (self != nil)
{
self.name = [aDecoder decodeObjectForKey: @"name"];
self.email = [aDecoder decodeObjectForKey: @"email"];
self.facebookId = [aDecoder decodeObjectForKey: @"facebookId"];
self.userId = [aDecoder decodeIntegerForKey: @"userId"];
}
return self;
}
...
@end
感謝它的工作。我實際上忘記了使用'writeToFile'與使用'NSKeyedArchiver'做不同。 –