저는 앱 전체에 영구 설정을 유지하려는 클래스가 있습니다. 이 클래스는 다음과 같이 정의된다싱글 톤을 사용하여 보관하기
@interface Archive : NSCoder <NSCoding> {
NSString *fromAddress;
NSString *toAddress;
... more ...
}
@property(nonatomic,retain) NSString *fromAddress;
@property(nonatomic,retain) NSString *toAddress;
+ (Archive *)sharedArchive;
-(void)encodeWithCoder:(NSCoder *)aCoder;
-(id)initWithCoder:(NSCoder *)aDecoder;
그리고로 구현 :
@synthesize fromAddress, toAddress;
+ (Archive *)sharedArchive
{
if (sharedArchive == nil) {
NSMutableData *data = [[NSMutableData alloc] initWithContentsOfFile:@"mydata"];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
sharedArchive = [unarchiver decodeObjectForKey:@"myapp"];
[unarchiver finishDecoding];
}
return sharedArchive;
}
+ (id)allocWithZone:(NSZone *)zone
{
sharedArchive = [super allocWithZone:NULL];
return sharedArchive;
}
- (id)copyWithZone:(NSZone *)zone
{
return self;
}
- (id)retain
{
return self;
}
- (NSUInteger)retainCount
{
return NSUIntegerMax;
}
- (void)release
{
//do nothing
}
- (id)autorelease
{
return self;
}
-(void)encodeWithCoder:(NSCoder *)aCoder {
[aCoder encodeObject:self.fromAddress forKey:@"fromAddress"];
[aCoder encodeObject:self.toAddress forKey:@"toAddress"];
}
-(id)initWithCoder:(NSCoder *)aDecoder {
self = [self initWithCoder:aDecoder];
fromAddress = [[aDecoder decodeObjectForKey:@"fromAddress"] retain];
toAddress = [[aDecoder decodeObjectForKey:@"toAddress"] retain];
return self;
}
응용 프로그램 위임 applicationWillTerminate 방법 :
- (void)applicationWillTerminate:(UIApplication *)application {
/*
Called when the application is about to terminate.
See also applicationDidEnterBackground:.
*/
NSMutableData *data = [[NSMutableData alloc] init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:[Archive sharedArchive] forKey:@"myapp"];
[archiver finishEncoding];
[data writeToFile:@"myapp" atomically:YES];
}
I 보관 해제 아카이브 /이 개념에 새로운입니다. 문제는 데이터 파일에서 다시 읽을 수 없다는 것입니다. 나는 다음과 같은 오류가 발생합니다 :
- [NSKeyedUnarchiver initForReadingWithData이 :] : 데이터가 NULL
사람이 내가 잘못 뭐하는 거지 설명 할 수 있을까요? 또는 영구 데이터를 저장/복원하는 더 좋은 방법 일 수 있습니다. NSUserDefaults 클래스를 살펴 보았지만 내 경우에 맞지 않는다고 생각합니다 ... 사용자 환경 설정을 저장하려고하지 않습니다.
첫 번째 문장에서 끝나야합니다. :) – bbum
아니요, 실제로 두 개 이상의 문자열이 필요합니다. 이 예제를 사용하여 코드를 단축했습니다. 나는 당신의 제안을 따르고 내가 나의 목표와 함께 더 나아갈 수 있는지보기 위해 노력할 것입니다. 감사 – Raisen