1 首先需要从本地导入json文件
在Main.storyboard上面拉上一个按钮localButton,按钮的作用是从本地导入json文件
写一个读取文件的函数
当点击按钮的时候,则可以触发读取文件的操作
1.1 读取本地文件
代理(Delegate)是iOS开发中的一种重要的消息传递方式,是iOS开发中普遍使用的通用设计模式,iOS集成开发环境Xcode中,提供大量的控件,例如UITableView,UIScrollViewDelegate,UISearchView等都是用代理机制实现消息传递。代理机制由代理对象、委托者、协议三部分组成。
代理是一种通用的设计模式,在iOS中对代理设计模式支持的很好,有特定的语法来实现代理模式,objective c和Swift语言可以通过@Protocol实现协议。
代理主要由三个部分组成
- 协议:用来指定代理双方可以做什么,必须做什么
- 代理:根据指定的协议,完成委托方需要实现的功能
- 委托:根据指定的协议,指定代理去完成什么功能
1、首先需要声明一个可变数组,用来放置文件导入之后传进来的数据
@property (nonatomic, strong)NSMutableArray *datas;
2、实现代理
//实现代理
#pragma mark - UIDocumentPickerDelegate
//用户选择文件回调
- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentsAtURLs:(NSArray<NSURL *> *)urls {
//获取授权
BOOL fileUrlAuthozied = [urls.firstObject startAccessingSecurityScopedResource];
if (fileUrlAuthozied) {
//通过文件协调工具来得到新的文件地址,以此得到文件保护功能
NSFileCoordinator *fileCoordinator = [[NSFileCoordinator alloc] init];
NSError *error;
[fileCoordinator coordinateReadingItemAtURL:urls.firstObject options:0 error:&error byAccessor:^(NSURL *newURL) {
//读取文件
NSError *error = nil;
NSData *fileData = [NSData dataWithContentsOfURL:newURL options:NSDataReadingMappedIfSafe error:&error];
if (error) {
//读取出错
} else {
NSMutableArray *array = [NSJSONSerialization JSONObjectWithData:fileData options:NSJSONReadingMutableLeaves error:nil];
NSMutableArray *datas = [[NSMutableArray alloc]init];
//对整体数据格式验证
if (![array isKindOfClass:[NSArray class]]) {
[Toast showToast:@"数据格式有误" withView:self.view];
return;
}
if (array.count == 0) {
[Toast showToast:@"数据为空数据" withView:self.view];
return;
}
//单个数据格式验证
for (int i = 0; i< array.count; i++) {
NSDictionary *dic = array[i];
if ([dic isKindOfClass:[NSDictionary class]]||[dic isKindOfClass:[NSMutableDictionary class]]) {
[datas addObject:[array[i] mutableCopy]];
}else{
NSString *msg = [NSString stringWithFormat:@"%d个数据格式错误",i];
[Toast showToast:msg withView:self.view];
return;
}
}
[self pushViewController:datas];
}
[self dismissViewControllerAnimated:YES completion:NULL];
}];
[urls.firstObject stopAccessingSecurityScopedResource];
} else {
//授权失败
}
}
1.2 初始化对象
@property (nonatomic, strong) UIDocumentPickerViewController *documentPickerVC;
//初始化对象
#pragma mark -- getter
- (UIDocumentPickerViewController *)documentPickerVC {
if (!_documentPickerVC) {
self.documentPickerVC = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:@[@"public.content"] inMode:UIDocumentPickerModeOpen];
_documentPickerVC.delegate = self;
_documentPickerVC.modalPresentationStyle = UIModalPresentationFormSheet; //设置模态弹出方式
}
return _documentPickerVC;
}
1.3 设置“本地导入”按钮点击事件
- (IBAction)localButtonClick:(id)sender{
[self presentViewController:self.documentPickerVC animated:YES completion:nil];
}
1.2 导入文件跳转界面
1.2.1 拖一个TableViewCell