Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 尝试加载已保存的NSMutableArray_Ios_Objective C - Fatal编程技术网

Ios 尝试加载已保存的NSMutableArray

Ios 尝试加载已保存的NSMutableArray,ios,objective-c,Ios,Objective C,这是我用来保存NSMutableArray“names”的代码(在用户按下保存按钮后),我认为它可以正常工作,但我不确定当我重新打开应用程序时加载我的数组的对应代码是什么。任何帮助都将不胜感激 - (IBAction)save:(id)sender { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *docDir

这是我用来保存NSMutableArray“names”的代码(在用户按下保存按钮后),我认为它可以正常工作,但我不确定当我重新打开应用程序时加载我的数组的对应代码是什么。任何帮助都将不胜感激

- (IBAction)save:(id)sender {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *docDir = [paths objectAtIndex:0];
    NSString *fullFileName = [NSString stringWithFormat:@"%@/temporaryArray", docDir];
    [NSKeyedArchiver archiveRootObject:names toFile:fullFileName];
}

你已经走到一半了。您已经了解了如何归档对象。问题是,您如何取消归档?正如我在评论中所解释的,这是通过名为
NSKeyedUnarchiver
的类完成的

让我们从一个代码示例开始:

@try {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *docDir = [paths objectAtIndex:0];
    NSString *defaultPath = [docDir stringByAppendingPathComponent:@"temporaryArray"];.

    self.yourArray = [NSKeyedUnarchiver unarchiveObjectWithFile: defaultPath];

    if (!self.yourArray) {
        NSLog(@"Error!");
    } else {
        // Success!
    }
} @catch (NSException *exception) {
    NSLog(@"Some error happened: %@", exception);
}
nskeyedurchiver
类获取一个文件路径,该文件包含由
nskeyedurchiver
存档的内容。然后,它将读取此文件并返回“root”对象——您告诉
NSKeyedArchiver
要存档的对象。就这么简单。(当然,您应该包括错误处理,我在上面给出了一个简单的示例。)

如果你想要其他资源,你可以阅读著名的马特·汤普森的著作,这本书很好地解释了课程背后的概念


希望这能有所帮助。

如果数组的内容都是属性列表对象(NSString、NSData、NSArray或NSDictionary对象),则可以使用NSKeyedArchiever/NSKeyedUnachier以外的其他方式进行保存和读取:

- (IBAction)save:(id)sender 
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *docDir = [paths objectAtIndex:0];
    NSString *fullFileName = [docDir stringByAppendingPathComponent:@"temporaryArray"];
    [names writeToFile:fullFileName atomically:YES];
}

- (NSMutableArray*)readNames
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *docDir = [paths objectAtIndex:0];
    NSString *fullFileName = [docDir stringByAppendingPathComponent:@"temporaryArray"];
    return [NSMutableArray arrayWithContentsOfFile:fullFileName];
}
在代码的某个地方,在下面的代码中输入数据

NSArray *arrSavedData = [[NSUserDefaults standardDefaults] objectforkey:@"Paths"];

与NSKeyedArchiver相反的是
nskeyedunachiver
!展示你的努力。您已经知道如何获取路径。只需使用
nskeyedunachiver
。顺便说一句-不要使用
stringWithFormat:
构建路径。使用
NSString*fullFileName=[docDir stringByAppendingPathComponent:@“临时数组”]
NSArray *arrSavedData = [[NSUserDefaults standardDefaults] objectforkey:@"Paths"];