Object-c学习笔记十六-----文件加载与保存

来源:互联网 发布:兰州知豆招聘信息 编辑:程序博客网 时间:2024/06/10 08:41

Cocoa中有一类名为属性列表的对象是plist。

属性列表类包含NSArray ,NSDictionary,NSString,NSNumber ,NSDate和NSData。

看看NSDate和NSData用法。

    NSDate *dates ;

    dates=[NSDatedate];

   NSLog(@"today is %@",dates);

    

   NSDate *yesterday=[NSDatedateWithTimeIntervalSinceNow:-(24*60*60)];

   NSLog(@"yesterday is %@",yesterday);

    

   constchar *string ="Hi there,this is c string ";

    

    NSData *data=[NSData dataWithBytes:string length:strlen(string)+1];//+1用于包含c字符串所需的尾部零字节。

   NSLog(@"data is %@",data);

   NSLog(@"%d byte string is '%s'",[datalength],[databytes]);//length表示输出字节数,bytes表示指向字符串起始位置的指针。

    

    NSArray *phrase;

    phrase = [NSArrayarrayWithObjects:@"I",@"seem",@"to",@"be",@"a",@"verb",nil];

    [phrasewriteToFile:@"/tmp/verbiage.txt" atomically:YES];//将属性方法类表写入文件。

     NSLog (@"%@", phrase);

    

   NSArray *phrase2 = [NSArrayarrayWithContentsOfFile:@"/tmp/verbiage.txt"];

    NSLog (@"%@", phrase2);


如何找到临时文件夹tmp呢?

打开Finder,然后使用快捷键Shift+Command+G 弹出一个对话框,输入/tmp就会找到进入tmp文件夹。

plutil -convert xml1 filename.plist可以将这些文件转换成可读的形式。

该方法的缺点是不会返回任何错误信息。


编码对象 NSCoder类时一个抽象类,定义一些有用的方法来在对象于NSData之间来回转换。

如果父类采用了NSCoding协议,则应该调用[super initWithCoder:decoder],否则,只需要调用[super init]即可。

@interface Things :NSObject<NSCoding>

{

    NSString *name;

    int magicNumber;

    float shoeSize;

    NSMutableArray *subThings;

}

@property (copy)NSString *name;

@propertyint magicNumber;

@propertyfloat shoeSize;

@property (retain)NSMutableArray *subThings;


-(id)initWithName:(NSString *)n magicNumber:(int) mn shoeSize:(float) ss;

@end


@implementation Things

@synthesize name;

@synthesize magicNumber;

@synthesize shoeSize;

@synthesize subThings;


-(id)initWithName:(NSString *)n magicNumber:(int)mn shoeSize:(float)ss

{

   if(self=[superinit])

    {

        self.name=n;

        self.magicNumber=mn;

        self.shoeSize=ss;

        self.subThings=[NSMutableArrayarray];

    }

   returnself;

}


-(void) dealloc

{

    [namerelease];

    [subThingsrelease];

    [superdealloc];

}

-(void) encodeWithCoder:(NSCoder *)aCoder//方法与每个实例变量名称匹配的键下编码这些实例变量。

{

    [aCoderencodeObject:nameforKey:@"name"];

    [aCoderencodeInt:magicNumberforKey:@"magicNumber"];//每种类型都有不同的encodeSomething: forkey:

    [aCoderencodeFloat:shoeSizeforKey:@"shoeSize"];

    [aCoderencodeObject:subThingsforKey:@"subThings"];    

}


-(id) initWithCoder:(NSCoder *)aDecoder//如果需要恢复某个对象 可以使用decodeSomething: forkey:

{

   if(self=[superinit])

       {

           self.name=[aDecoder decodeObjectForKey:@"name"];

           self.magicNumber=[aDecoder decodeIntForKey:@"magicNumber"];

           self.shoeSize=[aDecoder decodeFloatForKey:@"shoeSize"];

          self.subThings=[aDecoderdecodeObjectForKey:@"subThings"];

       }

   returnself;

}


-(NSString *) description

{

   NSString *description=[NSStringstringWithFormat:@"%@:%d/%.1f %@",name ,magicNumber,shoeSize,subThings];

    return (description);

}

@end

main中主要代码:

    Things *thing1;

    thing1=[[Thingsalloc]initWithName:@"thing1"magicNumber:42shoeSize:10.5];

   NSLog(@"some thing: %@",thing1);

    

    

    NSData *freezeDried;

    freezeDried = [NSKeyedArchiverarchivedDataWithRootObject: thing1];//先创建一个NSKeyedArchiver实例,然后将它传递给thing1-encodeWithCoder方法

    [thing1 release];

    thing1 = [NSKeyedUnarchiverunarchiveObjectWithData: freezeDried];

   NSLog (@"reconstituted thing: %@", thing1);

    

    Things *anotherThing;

    anotherThing=[[Thingsalloc]initWithName:@"thing2"magicNumber:23shoeSize:13.0];

    [thing1.subThingsaddObject:anotherThing];

    anotherThing=[[Thingsalloc]initWithName:@"thing3"magicNumber:17shoeSize:9.0];

    [thing1.subThingsaddObject:anotherThing];

   NSLog(@"thing with anotherthing: %@",thing1);


Cocoa提供两种方式加载和保存文件。一种是属性类表,另外一种是采用NSCoding协议和实现方法来编码和解码对象。将大量对象转换成NSData类,然后保存到磁盘中。
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 东方航空联程机票航班延误怎么办 别别人伸请更换手机绑定qq怎么办 绑定手机号的扣扣忘记密码怎么办 微信公众号个人主体变更公司怎么办 微信号注册成订阅号了怎么办 微信开通了企鹅影院会员怎么办 注销公众号对公账号填写错误怎么办 国外邮的东西在北京扣了手续怎么办 微信购物商城买的东西不发货怎么办 魅族手机电话图标没有了怎么办 新商盟网页新商盟网页打不开怎么办 京东商城购物车装满了怎么办 商家想入住美团没有营业执照怎么办 旅行团定好的人数临时加人该怎么办 淘宝上发货后12天未收到款怎么办 京东购买的东西烂了怎么办 苹果4s手机激活密码忘了怎么办 小米4c返回键失灵了怎么办 小米4c下面三个键失灵怎么办 谷歌浏览器打不开指定的网址怎么办 电脑上我的电脑图标没了怎么办 手机上的短信图标没了怎么办 qq密保手机被别人换了怎么办 苹果六手机很卡网络不给力怎么办 堡垒之夜卡在载入界面怎么办 登录新福建一直说网络不给力怎么办 开发游戏平台给了钱不给东西怎么办 代号英雄与服务器断开连接了怎么办 千牛聊天页面买家信息不显示怎么办 秒拍存草稿箱的视频没了怎么办? 登录山东掌厅出现服务器错误怎么办 微信号被多人投诉被限制登录怎么办 联想平板电脑开机密码忘记了怎么办 申请的qq没登录忘了账号怎么办 炫舞时代由于网络原因登不上怎么办 qq申请太多进不了热聊怎么办 手机号申请的微信号被盗了怎么办 买菜别人少找了钱不还怎么办 在掌上英雄联盟买皮肤买错区怎么办 win8我的电脑图标没了怎么办 英雄联盟老是卡在安全扫描怎么办