iphone 数据存储之属性和归档archive

     在IPHONE中有四种方式可以永久存储数据分别是属性列表、归档、SQLITE3、coredata。前两者、后二者操作的时候有些地方是相同的,以属 性列表和归档来说都会用writeToFile/URL:path atomically:flag 和initWithContentofFile/URL:path;两都都不能直接操作基本数据类型,不过前者不能操作自定义的类,而后者可以通过实现 NSCoding协议来达到目的。另外要说点的就是IPHONE每个应用都会有三个文件夹分别是documents、tmp、library分别称为存储 应用的数据,临时数据,数据库。我们要保存的数据会在documents中。由于时间关系抽空再把这个文字写完整些。

#import "dataprocessAppDelegate.h"
@implementation dataprocessAppDelegate
@synthesize window;
@synthesize dataArray;
-(NSString*)pathFileForProcess:(NSString *)pathName{
NSArray *directory=NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
return [[directory objectAtIndex:0] stringByAppendingPathComponent:pathName];
}
z
-(void)writeDataToFile{
firstData = [[NSString alloc] initWithString:@"im first!"];
secondData = [[NSString alloc] initWithString:@"im secondData!"];
thirdData = [[NSString alloc] initWithString:@"im thirdData!"];
NSLog(@"write:\n first: %@ \nscond: %@ \nthird: %@", firstData, secondData, thirdData);
NSMutableArray *tmp = [[NSMutableArray alloc] init];
[tmp addObject:firstData];
[tmp addObject:secondData];
[tmp addObject:thirdData];
self.dataArray = tmp;
[tmp release];

[firstData release];[secondData release];[thirdData release];
BOOL bWrite = [dataArray writeToFile:[self pathFileForProcess:@"myTest.txt"] atomically:YES];
}//属性读
-(void)readDataFromFile{
if([[NSFileManager defaultManager] fileExistsAtPath:[self pathFileForProcess:@"myTest.txt"]]){
      NSMutableArray  *tmpRead = [[NSMutableArray alloc] initWithContentsOfFile:[self pathFileForProcess:@"myTest.txt"]];
  self.dataArray = tmpRead;
      [tmpRead release];

    firstData = [dataArray objectAtIndex:0];
    secondData = [dataArray objectAtIndex:1];
    thirdData = [dataArray objectAtIndex:2];

    NSLog(@"read:\n first: %@ \nscond: %@ \nthird: %@", firstData, secondData, thirdData);
return;
}
NSLog(@"PROCESS FIRLE DOESNT EXITS!");
}

#pragma mark -------object-------------
//归档写
-(void)processObjectWrite{
person *pObject= [[person alloc] init];
pObject.name = [[NSString alloc] initWithString:@"wenQiang"];
pObject.profession = [[NSString alloc] initWithString:@"project manager"];
//[pObject setAge:24 andMarry: NO];

//NSMutableArray *testData = [[NSMutableArray alloc] init];
NSMutableData *data=[[NSMutableData alloc] init];
NSKeyedArchiver *archiver=[[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:pObject forKey:@"kObject"];
[archiver finishEncoding];
Boolean bWrite = [data writeToFile:[self pathFileForProcess:@"object2.txt"] atomically:YES];
if(bWrite) NSLog(@"ok..."); else NSLog(@"write error!");
[archiver release];
//[pObject release];
}、、归档读
-(void)processObjectRead{
NSMutableData *data = [[NSMutableData alloc] initWithContentsOfFile:[self pathFileForProcess:@"object2.txt"]];
NSLog(@"data %@..", data);

NSKeyedUnarchiver *unchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
person *tmp = [unchiver decodeObjectForKey:@"kObject"];
[unchiver finishDecoding];

NSLog(@"OBJECT: name: %@ profession: %@\nage: %@\n marry:%@", tmp.name, tmp.profession);
[unchiver release];
//[tmp release];

//实现
- (void)applicationDidFinishLaunching:(UIApplication *)application {    

    // Override point for customization after application launch
//[self writeDataToFile];
//[self readDataFromFile];

[self processObjectWrite];
[self processObjectRead];
    [window makeKeyAndVisible];
}


- (void)dealloc {
    [window release];
[dataArray release];
    [super dealloc];
}


@end
//以下是自定义的类
#pragma mark-----------------------class person----------------
#define       kName              @"keyName"
#define       kProfession @"keyProfession"
#define       kAge @"keyAge"
#define       kMarry @"keyMarry"

@implementation person
@synthesize name;
@synthesize profession;
#pragma mark---------------nscoding delegate 2 method---------
- (void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:name forKey: kName];
[aCoder encodeObject:profession forKey: kProfession];
// [aCoder encodeObject:Age forKey: kAge];
// [aCoder encodeObject:marry forKey:kMarry];
}
- (id)initWithCoder:(NSCoder *)aDecoder{
if(self = [super init]){
self.name = [aDecoder decodeObjectForKey:kName];
self.profession = [aDecoder decodeObjectForKey:kProfession];
//Age = [aDecoder decodeObjectForKey:kAge];
// marry=[aDecoder decodeObjectForKey:kMarry];
}
return self;
}
#pragma mark ---------------NSCopying 1 method-------------
- (id)copyWithZone:(NSZone *)zone{
person *tmp = [[[self class] allocWithZone:zone] init];

tmp.name = [self.name copy];
tmp.profession = [self.profession copy];
return nil;
}

-(void)dealloc{
[name release];
[profession release];
[super dealloc];
}
//-(void)setAge:(NSInteger)age andMarry:(Boolean)b{
// Age = age;
// marry = b;
//}

@end

posted @ 2010-12-10 11:29  子非あ鱼  阅读(1272)  评论(0编辑  收藏  举报