4

ファイルへの書き込みとファイルからの読み込みに関する演習を行っています。

を作成しNSString、それをファイルに書き込んで、NSString再度ロードしました。単純。

NSMutableArrayof NSStrings、またはより良いNSMutableArray自分のクラスでこれを行うにはどうすればよいですか?

#import <Foundation/Foundation.h>

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

    @autoreleasepool {

        // insert code here...

        //write a NSString to a file
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];
        NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"file.txt"];

        NSString *str = @"hello world";
        NSArray *myarray = [[NSArray alloc]initWithObjects:@"ola",@"alo",@"hello",@"hola", nil];

        [str writeToFile:filePath atomically:TRUE encoding:NSUTF8StringEncoding error:NULL];

        //load NSString from a file
        NSArray *paths2 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory2 = [paths2 objectAtIndex:0];
        NSString *filePath2 = [documentsDirectory2 stringByAppendingPathComponent:@"file.txt"];
        NSString *str2 = [NSString stringWithContentsOfFile:filePath2 encoding:NSUTF8StringEncoding error:NULL];

        NSLog(@"str2: %@",str2);

    }
    return 0;
}

印刷: str2: こんにちは世界

4

2 に答える 2

12

配列をplistとして書きたい場合は、次のことができます

// save it

NSArray *myarray = @[@"ola",@"alo",@"hello",@"hola"];
BOOL success = [myarray writeToFile:path atomically:YES];
NSAssert(success, @"writeToFile failed");

// load it

NSArray *array2 = [NSArray arrayWithContentsOfFile:path];
NSAssert(array2, @"arrayWithContentsOfFile failed");

詳細については、『Property List Programming Guide』の「 Using Objective-C Methods to Read and Write Property-List Data 」を参照してください。

しかし、オブジェクトの可変性/不変性 (つまり、正確なオブジェクト型) を保持し、より幅広いオブジェクト型の配列を保存する可能性を開きたい場合は、plist ではなくアーカイブを使用することをお勧めします。

NSMutableString *str = [NSMutableString stringWithString:@"hello world"];
NSMutableArray *myarray = [[NSMutableArray alloc] initWithObjects:str, @"alo", @"hello", @"hola", nil];

//save it

BOOL success = [NSKeyedArchiver archiveRootObject:myarray toFile:path];
NSAssert(success, @"archiveRootObject failed");

//load NSString from a file

NSMutableArray *array2 = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
NSAssert(array2, @"unarchiveObjectWithFile failed");

NSCoding配列を使用してこの手法を説明していますが、これは (文字列、配列、辞書などの基本的な Cocoa クラスの多くを含む) に準拠する任意のオブジェクトで機能します NSNumber。独自のクラスを で動作させたい場合NSKeyedArchiverは、それらも に準拠させる必要がありNSCodingます。詳細については、アーカイブおよびシリアライゼーション プログラミング ガイド を参照してください。

于 2013-10-25T16:44:04.880 に答える
0

Apple のこのドキュメントでは、プロセスについて説明しています。

于 2013-10-25T16:17:33.183 に答える