保存并加载NSMutableArray

时间:2015-05-08 15:41:56

标签: ios objective-c

我想要我的应用程序工作,以便当用户按下“保存”按钮时,将保存从文本字段输入的NSMutableArray字符串(该数组称为“名称”)。当然,我还希望能够在关闭/重新打开应用程序时加载NSMutableArray。

现在我的保存按钮是IBAction“保存”。所以在我的实现文件中我有:

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

首先,这看起来应该有用吗?因为当我尝试按下保存按钮时,我的应用程序多次崩溃。第二个我是正确的在IBAction中创建文件路径?或者我应该在其他地方创建它(例如在viewDidLoad下)?

其次,我应该如何以及在何处加载我保存的NSMutableArray(“名称”)?

非常感谢!

2 个答案:

答案 0 :(得分:0)

你在这里缺少一些概念,首先正如Zaph已经说过的,你确定names个对象符合NSCoding协议吗?
如果是,则这些代码行应该起作用:

- (IBAction)save:(id)sender {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = paths.firstObject;
    // Add to the path a new directory just to keep things ordered
    documentsDirectory = [documentsDirectory stringByAppendingPathComponent:@"AppData"];
    // If the directory doesn't exist it creates one
    if (![[NSFileManager defaultManager] fileExistsAtPath:documentsDirectory]) {
        NSError *error;
        [[NSFileManager defaultManager] createDirectoryAtPath:documentsDirectory withIntermediateDirectories:YES attributes:nil error:&error];
        if (error) {
            NSLog(@"Error creating directory %@",error.localizedDescription);
        }
    }
    NSString * path = [documentsDirectory stringByAppendingPathComponent:@"names.arc"] ;
    //Check if the file alredy exist, if does we remove it or the file manager will trigger an error (it doesn't overwrite automatically)
    if ([[NSFileManager defaultManager] fileExistsAtPath:path]) {
        [[NSFileManager defaultManager] removeItemAtPath:path error:nil] ;
    }
    // Pass the object that you want to archive, if it is a collection the object inside must support NSCoding protocol
    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:<#ObjectsConformToNSCoding#>];
    // Saving to the path
    [data writeToFile:path atomically:YES];

}


[UPDATE]
正如Zaph所指出的,所有错误都应该正确处理,否则可能会发生不好的事情。

答案 1 :(得分:0)

消息:&#34;线程1:断点3.1&#34;表示该计划已达到一个断点。可以通过单击Xco​​de编辑器中的行号来意外或有意设置断点。断点用于停止程序执行,以允许开发人员检查该点的执行状态。然后程序可以恢复。

断点不是崩溃。

线号上方的蓝色箭头也是断点指示符。您可以通过向右拖动来删除它,也可以通过单击(它将变暗)或仅继续(菜单调试:继续)来禁用它。

要查看所有断点,请查看断点导航器:Command-7。

值得花时间阅读Xcode文档WRT调试。