同じ種類のカスタムオブジェクトをキャッシュディレクトリに持つ辞書を作成します。私は何が間違っているのか分からないが、何も書かれていない。 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/"];
}
などのキャッシュフォルダを取得する:私は-[User sharedUsers]
であると仮定してい
@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'で行うのと同じではないことを忘れています。 –