Я хочу написать словарь с пользовательскими объектами одного типа в каталог кэша.Я не знаю, что не так, но ничего не написано.writeToFile
возвращает ложь.Это работало, когда мне нужно было сохранить только один экземпляр пользователя, но теперь мне нужен словарь.Ключи словаря являются строками.Странно то, что 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