json小工具

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

1.2 导入文件跳转界面

1.2.1 拖一个TableViewCell

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Αиcíеиτеǎг

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值