我正在开发一个应用程序,当用户点击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);
答案 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。