无法将我的数据保存在文件中

时间:2013-12-26 12:29:20

标签: ios iphone objective-c

我正在开发一个应用程序,当用户点击log in时,我正在为应用程序数据调用 API (因为 API 需要user_id)并将该数据放在appDelegate变量中。在用户登录并登陆主页后,我正在尝试将应用程序数据写入文件,但它没有发生。

这是我的代码:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [NSString stringWithFormat:@"%@/myagenda.json",documentsDirectory];
NSLog(@"%@",filePath);
appDelegate.myAgendaArray = [[NSMutableArray alloc]init];
appDelegate.myAgendaArray = [NSMutableArray arrayWithContentsOfFile:filePath];
if (!appDelegate.myAgendaArray) {
    appDelegate.myAgendaArray = [[NSMutableArray alloc]init];
}
NSLog(@"%@",appDelegate.myAgendaArray);
[appDelegate.myAgendaArray writeToFile:filePath atomically:YES];
appDelegate.myAgendaArray = [[NSMutableArray alloc] initWithContentsOfFile:filePath];
NSLog(@"%@",appDelegate.myAgendaArray);

4 个答案:

答案 0 :(得分:1)

为什么要尝试使用arrayWithContentsOfFile加载* .json文件?该方法需要XML或二进制plist文件。

JSON文件必须如下所示:

NSData *data = [NSData dataWithContentsOfFile:filePath];
appDelegate.myAgendaArray = [[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil] mutableCopy];

答案 1 :(得分:0)

您正在分配您的阵列太多次导致数据丢失。

重写代码(删除不需要的行):

appDelegate.myAgendaArray = [NSMutableArray arrayWithContentsOfFile:filePath];
if (!appDelegate.myAgendaArray) {
    appDelegate.myAgendaArray = [[NSMutableArray alloc]init];
}
NSLog(@"%@",appDelegate.myAgendaArray);
[appDelegate.myAgendaArray writeToFile:filePath atomically:YES];
NSLog(@"%@",appDelegate.myAgendaArray);

另外,还有一点是,你的数组似乎是空的。你没有向数组添加任何东西。

希望这有帮助。

答案 2 :(得分:0)

路径问题

替换它:

NSString *filePath = [NSString stringWithFormat:@"%@/myagenda.json",documentsDirectory];

NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"myagenda.json"];

将您的数组转换为NSData,然后写入filePath。

答案 3 :(得分:-1)

您正在尝试将数组直接保存到文件中。您应该使用[appDelegate.myAgendaArray description]或首先将其转换为NSdata。