青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

攀升·Uranus


Something Different,Something New
數據加載中……

iOS寫文件補充

一 系統內置對象讀寫至文件

- If your objects are of type NSString,NSDictionary,NSArray,NSDate,NSData, or NSNumber, you can use the writeToFile:atomically: method implemented in these classes to write your data to a file. In the case of writing out a dictionary or an array, this method writes the data to the file in the format of an XML property list. Program 19.1 shows how the dictionary you created as a simple glossary in Chapter 15,“Numbers, Strings, and Collections,” can be written to a file as a property list.

 Program 19.1

#import <Foundation/NSObject.h>

#import <Foundation/NSString.h>

#import <Foundation/NSDictionary.h>

#import <Foundation/NSAutoreleasePool.h>

int main (int argc, char *argv[])

int main (int argc, char *argv[])

   {

                NSAutoreleasePool            * pool = [[NSAutoreleasePool alloc] init];

                NSDictionary       *glossary =

                [NSDictionary        dictionaryWithObjectsAndKeys:

                    @”A class defined so other classes can inherit from it.”, @”abstract class”,

                    @”To implement all the methods defined in a protocol”, @”adopt”,

                    @”Storing an object for later use. “,  @”archiving”,

                    nil

                ];

                if ([glossary writeToFile: @”glossary”                  atomically: YES] == NO)

                    NSLog (@”Save to file failed!”);

                [pool drain];

                return 0;

           }


To read an XML property list from a file into your program, you use the dictionaryWithContentsOfFile: or arrayWithContentsOfFile: methods.To read back data, use the dataWithContentsOfFile: method; to read back string objects, use the stringWithContentsOfFile:method. Program 19.2 reads back the glossary written in Program 19.1 and then displays its contents.  


#import <Foundation/NSObject.h> 

#import <Foundation/NSString.h> 

#import <Foundation/NSDictionary.h> 

#import <Foundation/NSEnumerator.h> 

#import <Foundation/NSAutoreleasePool.h> 


int main (int argc, char *argv[]) 

    NSAutoreleasePool  * pool = [[NSAutoreleasePool alloc] init]; 

    NSDictionary *glossary; 


    glossary = [NSDictionary dictionaryWithContentsOfFile: @”glossary”]; 


    for ( NSString *key in glossary ) 

        NSLog (@”%@: %@”,          key, [glossary objectForKey: key]); 


     [pool drain]; 

    return 0; 

 二 自定義對象讀寫至文件

 -   A more flexible approach enables you to save any type of objects to a file, not just strings, arrays, and dictionaries.This is done by creating a keyed archive using the NSKeyedArchiver class.
This implies that you can’t directly archive your AddressBook using this technique because the Objective-C system doesn’t know how to archive an AddressBook object. If you tried to archive it by inserting a line such as NSKeyedArchiver archiveRootObject: myAddressBook toFile: @”addrbook.arch”]; into your program, you’d get the following message displayed if you ran the program:

*** -[AddressBook encodeWithCoder:]: selector not recognized
*** Uncaught exception: <NSInvalidArgumentException>
*** -[AddressBook encodeWithCoder:]: selector not recognized
archiveTest: received signal: Trace/BPT trap
To archive objects other than those listed, you must tell the system how to archive, or encode, your objects, and also how to unarchive, or decode, them.This is done by adding encodeWithCoder: and initWithCoder: methods to your class definitions, according to the <NSCoding> protocol. For our address book example, you’d have to add these methods to both the AddressBook and AddressCard classes.

The encodeWithCoder: method is invoked each time the archiver wants to encode an object from the specified class, and the method tells it how to do so. In a similar manner, the initWithCoder: method is invoked each time an object from the specified class is to be decoded.

Program 19.5 Addresscard.h Interface File
#import <Foundation/NSObject.h>
#import <Foundation/NSString.h>
#import <Foundation/NSKeyedArchiver.h>
@interface AddressCard: NSObject <NSCoding, NSCopying>
{
NSString  *name;
NSString  *email;
}
@property (copy, nonatomic) NSString *name, *email;
-(void) setName: (NSString *) theName andEmail: (NSString *) theEmail;
-(NSComparisonResult) compareNames: (id) element;
-(void) print;
// Additional methods for NSCopying protocol
-(AddressCard *) copyWithZone: (NSZone *) zone;
-(void) retainName: (NSString *) theName andEmail: (NSString *) theEmail;

@end

-(void) encodeWithCoder: (NSCoder *) encoder
{
[encoder encodeObject: name forKey: @”AddressCardName”];
[encoder encodeObject: email forKey: @”AddressCardEmail”];
}
-(id) initWithCoder: (NSCoder *) decoder
{
name = [[decoder decodeObjectforKey: @”AddressCardName”] retain];
email = [[decoder decodeObjectforKey: @”AddressCardEmail”] retain];
return self;
}

#import “AddressBook.h”
#import <Foundation/NSAu orelea ePool.h>
int main (int argc, char *argv[])
{
 NSString  *aName = @”Julia Kochan”;
NSString  *aEmail = @”jewls337@axlc.com”;
NSString  *bName = @”Tony Iannino”;
NSString  *bEmail = @”tony.iannino@techfitness.com”;
NSString  *cName = @”Stephen Kochan”;
NSString  *cEmail = @”steve@steve_kochan.com”;
NSString  *dName = @”Jamie Baker”;
NSString  *dEmail = @”jbaker@hitmail.com”;
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
AddressCard *card1 = [[AddressCard alloc] init];
AddressCard *card2 = [[AddressCard alloc] init];
AddressCard *card3 = [[AddressCard alloc] init];
AddressCard *card4 = [[AddressCard alloc] init];
AddressBook  *myBook = [AddressBook alloc];
// First set up four address cards
[card1 setName: aName andEmail: aEmail];
[card2 setName: bName andEmail: bEmail];
[card3 setName: cName andEmail: cEmail];
[card4 setName: dName andEmail: dEmail];
myBook = [myBook initWithName: @”Steve’s Address Book”];
// Add some cards to the address book
[myBook addCard: card1];
[myBook addCard: card2];
[myBook addCard: card3];
[myBook addCard: card4];
[myBook sort];
if ([NSKeyedArchiver archiveRootObject: myBook toFile: @”addrbook.arch”] == NO)
NSLog (@”archiving failed”);
[card1 release];
[card2 release];
[card3 release];
[card4 release];
[myBook release];
[pool drain];
return 0;
}

Program 19.7 shows how you can read the archive into memory to set up the address
book from a file.
Program 19.7
#import “AddressBook.h”
#import <Foundation/NSAutoreleasePool.h>
int main (int argc, char *argv[])
{
AddressBook         *myBook;
NSAutoreleasePool   * pool = [[NSAutoreleasePool alloc] init];
myBook = [NSKeyedUnarchiver unarchiveObjectWithFile: @”addrbook.arch”];
[myBook list];
[pool drain];
return 0;
}

三 使用NSData讀寫文件

- You might not want to write your object directly to a file using the archiveRootObject:ToFile: method, as was done in the previous program examples.For example, perhaps you want to collect some or all of your objects and store them in a single archive file.You can do this in Objective-C using the general data stream object class called NSData.

int main (int argc, char *argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Foo               *myFoo1 = [[Foo alloc] init];
Foo               *myFoo2;
NSMutableData     *dataArea;
NSKeyedArchiver   *archiver;
AddressBook       *myBook;
// Insert code from Program 19.7 to create an Address Book
// in myBook containing four address cards
[myFoo1 setStrVal: @”This is the string”];
[myFoo1 setIntVal: 12345];
[myFoo1 setFloatVal: 98.6];
// Set up a data area and connect it to an NSKeyedArchiver object
dataArea = [NSMutableData data];
archiver = [[NSKeyedArchiver alloc]
initForWritingWithMutableData: dataArea];
// Now we can begin to archive objects
[archiver encodeObject: myBook forKey: @”myaddrbook”];
[archiver encodeObject: myFoo1 forKey: @”myfoo1”];
[archiver finishEncoding];
// Write the archived data are to a file
if ( [dataArea writeToFile: @”myArchive” atomically: YES] == NO)
NSLog (@”Archiving failed!”);
[archiver release];
[myFoo1 release];
[pool drain];
return 0;
}

- Restoring the data from your archive file is simple:You just do things in reverse. First, you need to allocate a data area like before.Next, you need to read your archive file into the data area; then you have to create an SKeyedUnarchiver object and tell it to decode data from the specified area.You must invoke decode methods to extract and decode your archived objects.When you’re finished, you send a finishDecoding message to the NSKeyedUnarchiver object.

#import <Foundation/NSObject.h>
#import <Foundation/NSAutoreleasePool.h>
#import <Foundation/NSString.h>
#import <Foundation/NSKeyedArchiver.h>
#import <Foundation/NSCoder.h>
#import <Foundation/NSData.h>
#import “AddressBook.h”
#import “Foo.h”
int main (int argc, char *argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSData            *dataArea;
NSKeyedUnarchiver *unarchiver;
Foo               *myFoo1;
AddressBook       *myBook;
// Read in the archive and connect an
// NSKeyedUnarchiver object to it
dataArea = [NSData dataWithContentsOfFile: @”myArchive”];
if (! dataArea) {
NSLog (@“Can’t read back archive file!”);
Return (1);
}
unarchiver = [[NSKeyedUnarchiver alloc]
initForReadingWithData: dataArea];
// Decode the objects we previously stored in the archive
myBook = [unarchiver decodeObjectForKey: @”myaddrbook”];
myFoo1 = [unarchiver decodeObjectForKey: @”myfoo1”];
[unarchiver finishDecoding];
[unarchiver release];
// Verify that the restore was successful
[myBook list];
NSLog (“%@\n%i\n%g”, [myFoo1 strVal],
[myFoo1 intVal], [myFoo1 floatVal]);
[pool release];
return 0;
}

參考:Programming.in.Objective-C.2.0.2nd(Addison.Wesley.2009)

posted on 2011-03-09 17:51 攀升 閱讀(876) 評論(0)  編輯 收藏 引用 所屬分類: iOS

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲激情一区二区三区| 午夜精品久久久久| 亚洲国产欧美日韩另类综合| 国产在线国偷精品产拍免费yy| 国产精品久久久久高潮| 国产精品久久久久久久久久妞妞 | 欧美日韩国内| 国产精品豆花视频| 午夜日韩福利| 欧美大香线蕉线伊人久久国产精品| 亚洲成人在线视频播放 | 亚洲精品国精品久久99热一| 99精品国产在热久久婷婷| 亚洲自拍偷拍一区| 欧美高清在线播放| 国产一区在线免费观看| 蜜桃久久av一区| 99在线|亚洲一区二区| 国产精品狠色婷| 卡一卡二国产精品| 在线视频日韩精品| 欧美黄色片免费观看| 亚洲一区欧美激情| 欧美不卡视频一区| 久久精品国产亚洲一区二区三区| 老司机一区二区三区| 国产精品一二一区| 亚洲一区二区精品视频| 欧美不卡在线| 国产精品人人爽人人做我的可爱| 99视频精品在线| 欧美激情成人在线视频| 久久久久久久网| 国产亚洲亚洲| 久久av一区二区三区漫画| 99re6热只有精品免费观看| 欧美精品少妇一区二区三区| 亚洲经典在线| 欧美一区=区| 国产精品制服诱惑| 亚洲国产精品久久久久秋霞蜜臀 | 国产一级久久| 日韩一级在线观看| 亚洲第一网站| 免费久久99精品国产自在现线| 欧美喷水视频| 亚洲欧美乱综合| 午夜精品久久久久久久男人的天堂 | 亚洲精品视频在线观看免费| 欧美成人精品不卡视频在线观看| 亚洲国产精品va| 亚洲大胆av| 狠狠做深爱婷婷久久综合一区| 久久精品夜色噜噜亚洲a∨| 亚洲一二三四久久| 国产日韩欧美黄色| 久久久久久久国产| 国产乱码精品一区二区三区不卡| 亚洲精品一区二区三区99| 亚洲国产女人aaa毛片在线| 久久大香伊蕉在人线观看热2| 亚洲高清一区二| 久久激情综合网| 久久久夜色精品亚洲| 麻豆精品在线观看| 亚洲丝袜av一区| 久久精品日韩欧美| 久久精品论坛| 欧美精品成人在线| 亚洲人体偷拍| 一区二区日韩免费看| 亚洲欧美视频一区| 欧美亚洲综合网| 老司机免费视频久久| 欧美99久久| 亚洲国产精品成人综合色在线婷婷 | 久久精品女人天堂| 国产视频在线一区二区| 性欧美videos另类喷潮| 亚洲区第一页| 夜夜嗨av一区二区三区四区| 亚洲精品乱码久久久久久日本蜜臀| 一区二区高清在线| 黄色精品网站| 免费欧美高清视频| 欧美亚洲日本网站| 国产一区二区黄| 久久美女性网| 久久国产黑丝| 亚洲电影免费观看高清完整版在线| 蜜桃av一区| 一区二区三区欧美亚洲| 亚洲欧美日韩国产综合| 国产亚洲人成a一在线v站| 另类亚洲自拍| 一区二区91| 久久先锋影音| 国产一区视频观看| 女女同性女同一区二区三区91| 欧美成人免费va影院高清| 99精品国产在热久久| 久久久成人网| 99re8这里有精品热视频免费| 午夜欧美不卡精品aaaaa| 伊人狠狠色j香婷婷综合| 午夜精品剧场| 亚洲欧洲视频| 亚洲精品一区二区三区樱花| 国产精品草莓在线免费观看| 亚洲精品乱码久久久久久日本蜜臀| 亚洲综合色网站| 在线成人av.com| 国产精品麻豆欧美日韩ww| 麻豆freexxxx性91精品| av不卡在线看| 欧美成人在线网站| 欧美在线电影| 国产一区二区三区无遮挡| 欧美日本韩国| 久久久久久夜| 欧美影片第一页| 久久综合中文| 亚洲欧美日韩一区二区三区在线观看| 亚洲电影免费在线| 国产亚洲成精品久久| 欧美午夜精品久久久久久超碰| 美女在线一区二区| 欧美一站二站| 性欧美超级视频| 亚洲香蕉网站| 亚洲精品自在在线观看| 欧美成人精品h版在线观看| 久久国产精品久久久| 亚洲一区二区三区乱码aⅴ| 亚洲国产欧美在线| 黄色一区三区| 欧美国产精品专区| 久久婷婷国产综合国色天香| 亚洲欧美一区二区视频| 中文国产一区| 一本久久a久久精品亚洲| 亚洲伦理一区| 91久久中文字幕| 亚洲破处大片| 亚洲精品极品| 99pao成人国产永久免费视频| 亚洲人成毛片在线播放| 亚洲精品国产精品国自产在线| 欧美黄色aa电影| 亚洲大胆女人| 在线亚洲精品| 亚洲一卡二卡三卡四卡五卡| 亚洲午夜一区二区三区| 亚洲在线视频网站| 亚洲一区免费视频| 欧美一区二区三区婷婷月色| 久久精品五月婷婷| 老巨人导航500精品| 欧美高清在线一区二区| 欧美激情国产日韩| 亚洲精品午夜| 亚洲欧美日本国产专区一区| 亚洲欧美日韩国产一区| 香蕉成人久久| 美女啪啪无遮挡免费久久网站| 欧美大片网址| 国产精品欧美激情| 国产一区二区三区四区在线观看 | 亚洲一区二区三区激情| 欧美伊人久久久久久久久影院| 久久久欧美一区二区| 欧美成人tv| 日韩视频在线一区二区| 亚洲欧美区自拍先锋| 老司机免费视频久久| 欧美日韩无遮挡| 欧美成人免费视频| 国产精品福利影院| 激情综合色综合久久综合| 亚洲美女精品久久| 亚洲人成网在线播放| 亚洲永久在线| 欧美a级理论片| 亚洲一区免费视频| 亚洲一区二区三区久久 | 一本久久青青| 久久精品二区三区| 欧美日韩国产a| 伊人久久大香线蕉av超碰演员| 中文国产亚洲喷潮| 老司机aⅴ在线精品导航| aa国产精品| 久热综合在线亚洲精品| 国产精品每日更新在线播放网址| 在线看日韩av| 久久精品综合一区| 一区二区国产在线观看| 男女精品网站| 伊人久久综合| 久久久999国产|