4

我正在做一些关于写入文件和从文件加载的练习。

我创建了一个NSString,然后将其写入文件,然后NSString再次加载。简单的。

我怎样才能用我自己的班级或更好的班级做到NSMutableArrayNSStrings一点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");

有关更多信息,请参阅属性列表编程指南中的使用 Objective-C 方法读取和写入属性列表数据。

但是,如果您想保留对象的可变性/不变性(即精确的对象类型),以及打开保存更广泛的对象类型的可能性,您可能希望使用存档而不是 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 回答