KeyWord:沙盒文件递归遍历、Swift里的闭包多个weak修饰、iOS使用AirDrop
iOS沙盒查看器FHHSandBoxViewer了解一下?
平时真机开发调试App的时候想查看沙盒具体内容一般做法是连接Xcode下载整个App的沙盒,不方便,于是自己写了一个沙盒查看器。
如何导入使用
Swift下
1.拖入文件夹FHHSandBoxViewer到你的工程;
2.找个入口然后添加如下代码:
let title = FHHSandboxViewController.defaultNavTitle
let path = FHHSandboxViewController.defaultPath
let sandBoxViewerVC = FHHSandboxViewController.init(navTitle: title, path: path)
let nav = UINavigationController.init(rootViewController: sandBoxViewerVC)
nav.navigationBar.isHidden = true
nav.navigationBar.isTranslucent = true
self.present(nav, animated: true, completion: {
sandBoxViewerVC.fhh_enterType = .present
})
OC下
1.拖入文件夹FHHSandBoxViewer到你的工程;
2.如果你的项目之前没有使用Swift,需要配置你Xcode的ProductName-Bridging-Header.h文件,可以参考OC和Swift混编开发配置;
3.找个入口添加如下代码:
NSString *defaultTitle = [FHHSandboxViewController defaultNavTitle];
NSString *defaultPath = [FHHSandboxViewController defaultPath];
FHHSandboxViewController *sandBoxViewerVC = [[FHHSandboxViewController alloc]
initWithNavTitle:defaultTitle
path:defaultPath];
UINavigationController *nav = [[UINavigationController alloc]
initWithRootViewController:sandBoxViewerVC];
[nav.navigationBar setHidden:YES];
[nav.navigationBar setTranslucent:YES];
[self presentViewController:nav animated:YES completion:^{
sandBoxViewerVC.fhh_enterType = FHHEnterTypePresent;
}];
MARK:
Swift闭包中用weak修饰多个对象
FHHSandboxViewController.swift中
在viewMoel的闭包中需要用weak修饰self并且对viewMoel本身也要weak修饰防止内存泄漏,但是之前没试过一个闭包多个weak修饰的写法,翻了翻官方文档,写法如下:
private func configSandboxViewModelDidSelectBlock(viewModel: FHHSandboxViewModel, subPath: String) {
viewModel.didSelectBlock = { [weak self, weak viewModel] in
if (self?.isSelected)! {
viewModel?.isSelected = !(viewModel?.isSelected)!
self?.tableView.reloadData()
self?.refreshAccessoryView()
} else {
if (viewModel?.isDir)! {
let vc = FHHSandboxViewController.init(navTitle: (viewModel?.pathLastName!)!, path: subPath)
self?.navigationController?.pushViewController(vc, animated: true)
}
}
}
}
使用AirDrop等分享内容:
let shareURLArray = self.getSelectedURL()
let vc = UIActivityViewController.init(activityItems: shareURLArray, applicationActivities: nil)
let completionWithItemsHandler = { (type: UIActivityType?, isSucceed: Bool?,array: Array<Any>?, error: Error?) in
FHHLog("error:\(String(describing: error?.localizedDescription))")
self.resetToUnSelectState()
self.tableView.refresh(viewModelArray: self.viewModelArray)
}
vc.completionWithItemsHandler = completionWithItemsHandler
self.present(vc, animated: true, completion:nil)
建议使用AirDrop导出,第三方软件对分享内容、大小、数量有限制
Tip:
1.使用AirDrop分享受系统保护的文件夹或文件会失败,不同系统或设备可能会有差别;例如,我在iOS10.1.1-iPhone7上分享Doucnemts、Library、temp目录失败,在iOS11.3-iPhone8上分享Doucnemts、Library、temp则成功,详情查看控制器打印的错误信息。
2.模拟器下的话可以使用软件TySimulator查看沙盒内容,也很方便。
3.手机空间不足也可能会导致AirDrop分享失败。