gpt4 book ai didi

objective-c - 将 NSMutableArray 写入文件并将其加载回来

转载 作者:太空狗 更新时间:2023-10-30 03:58:49 31 4
gpt4 key购买 nike

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

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

如何使用 NSStringsNSMutableArray 或更好的我自己的类的 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: hello world

最佳答案

如果你想把你的数组写成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");

有关详细信息,请参阅 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。有关详细信息,请参阅 Archives and Serializations Programming Guide .

关于objective-c - 将 NSMutableArray 写入文件并将其加载回来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19594670/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com