我想要我的应用程序工作,以便当用户按下“保存”按钮时,将保存从文本字段输入的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(“名称”)?
非常感谢!
答案 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;表示该计划已达到一个断点。可以通过单击Xcode编辑器中的行号来意外或有意设置断点。断点用于停止程序执行,以允许开发人员检查该点的执行状态。然后程序可以恢复。
断点不是崩溃。
线号上方的蓝色箭头也是断点指示符。您可以通过向右拖动来删除它,也可以通过单击(它将变暗)或仅继续(菜单调试:继续)来禁用它。
要查看所有断点,请查看断点导航器:Command-7。
值得花时间阅读Xcode文档WRT调试。