我升级到 macOS Sierra(以及后来的 Mojave),我试着在终端运行 git 命令,但是它一直显示如下的错误:
1xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
我该如何解决?
答
打开终端并且运行如下的命令:
1xcode-select --install
这将会下载并且安装 Xcode 开发工具并且解决这个问题。安装的时候需要同意许可协议。作为后续步骤,如果你有多个版本或者希望命令行工具在没有 Xcode 的情况下运行,则可能需要重置 Xcode 的路径。
12xcode-select --switch /Applications/Xcode.appxcode-select --switch /Library/Developer/CommandLineTools
我在这个问题中找到了解决方案,命令行工具无效。
...
最近,Google 开源了其 TCP BBR 拥塞控制算法,并提交到了 Linux 内核,从 4.9 开始,Linux 内核已经用上了该算法。根据以往的传统,Google 总是先在自家的生产环境上线运用后,才会将代码开源,此次也不例外。根据实地测试,在部署了最新版内核并开启了 TCP BBR 的机器上,网速甚至可以提升好几个数量级。于是我根据目前三大发行版的最新内核,开发了一键安装最新内核并开启 TCP BBR 脚本。
本脚本适用环境
系统支持:CentOS 6+,Debian 7+,Ubuntu 12+虚拟技术:OpenVZ 以外的,比如 KVM、Xen、VMware 等内存要求:≥128M日期 :2018 年 06 月 09 日
关于本脚本
1、本脚本已在 Vultr 上的 VPS 全部测试通过。2、当脚本检测到 VPS 的虚拟方式为 OpenVZ 时,会提示错误,并自动退出安装。3、脚本运行完重启发现开不了机的,打开 VPS 后台控制面板的 VNC, 开机卡在 grub 引导, 手动选择内核即可。4、由于是使用最新版系统内核,最好请勿在生产环境安装,以免产生不可预测之后果 ...
今天在做在线预览功能的时候碰到了一个蛋疼的问题,office 格式都可以完美的适配,但是 txt 格式出现了乱码。没办法只能进行一个转码,然后再输出内容。
提取 TXT 文件内容并转码 utf8
12345do { var encoding: String.Encoding = .utf8 let body = try String(contentsOf: url, usedEncoding: &encoding) return body} catch {}
这里我们的 body 就是我们获取的内容,默认的我们用了 utf8 编码格式,如果转码错误,说明文件的编码格式为其他格式。
对应中文编码
由于在 Swift 中,我并没有找到有关 GBK,GBK18030 等的转码写法,所以,这里我们使用 NSString 来进行中文简体和繁体的转码。
123456789101112131415if let body = try? NSString(contentsOf: url, encoding: SimplifiedChinese.GBK) ...
跨线程订阅的问题似乎在 RxSwift Slack 上一次又一次的被提到。这个解释起来也是非常的简单所以我觉得放在博客当中是一个好主意,无论你在何时需要,都可以通过连接进行访问,我也不用一次又一次的回复。
可观察序列的订阅(Observable subscriptions)
subscribing(订阅) 和 observing(观察) 方面的术语还有一点混乱,所以让我们先来解决这个问题(不要跳过本章节!)。
让我们看看 observable subscription 的工作原理。我们可以将订阅分成 3 个部分:
首先,你定义了一个 Observable,在某些情况下,你在闭包中提供一些代码来执行工作并向任何观察者(observers)发出元素。当你创建了一个可观察序列的时候,代码将会被保存以供将来使用,但是不会立即执行。如果没有观察者 - Observable 只是坐着等待并不做任何事情。
在为订阅建模时,你可以使用一些运算符(如 map,filter 等)来处理发出的元素。
只有当你在一个 Observable 上调用 subscribe(...) 方法时,你才能“打开它 ...
最近在做的一款 App 测试中出现了一个非常诡异的问题,偶尔的界面卡死,但是又并不是 Crash,没有抛出任何异常,把 App 切到后台然后在点开又恢复了,只不过转场的时候十分诡异,似乎完全没有动画,转场背景还是黑的。
什么原因呢?死循环?不可能;内存泄漏?也不可能?😂;手势冲突?很有可能🧐。无意中我发现了,在 UINavigationController 根视图上进行右滑返回上级页面时,页面就会卡死。原因找到了,一定是手势冲突。
问题原因描述
在我的项目中有一个基类 BaseViewController,由于项目中有时候需要隐藏 NavigationBar 所以我使用了 setNavigationBarHidden() 方法,使用这个方法会导致右滑返回上级页面的操作失效。所以我在 BaseViewController 中加入了如下的代码:
1234self.navigationController?.interactivePopGestureRecognizer?.delegate = selfextension BaseViewController: UIGestureReco ...
更新说明:本教程已由 Nikolas Burk 更新为 Xcode 9,iOS 11 和 Swift 4。最初的教程由 Chris Wagner 编写。
这篇教程向你展示了如何在 Swift 平台上使用流行的数据库 SQLite。在软件开发的领域,你需要很长时间才能保存应用数据。在很多情况下,这是以数据结构形式出现的。但是,如何有效的存储它 – 什么是有效的存储?
幸运的是,一些伟大的思想家已经开发出用于在数据库中存储结构化数据和编写语言功能以访问数据的解决方案。SQLite 默认在 iOS 中是可用的。实际上,如果你以前使用过 Core Data,那么你实际上已经使用过 SQLite,因为 Core Data 只是 SQLite 上的一个层封装,它提供了更方便的API。
通过这篇教程,你将学习到如何执行以下数据库的操作:
创建和连接一个数据库
创建一个表
插入一行
更新一行
删除一行
查询数据库
处理 SQLite 错误
在学习如何执行这些基本操作之后,你将看到如何以类似 Swift 的方式将它们包装起来。这将允许你为应用程序编写抽象 API,以便你(大多数)可以避免去直接使 ...
之前我们说过了运用面向协议的思想为控件添加 action 今天我们再来写一个基于 Storyboard 的初始化方法。在我的项目中,我没有将所有的 controller 都放在一个 Storyboard 文件中,原因有两个:
当 Controller 很多的时候不方便查找对应的 Storyboard。
打开 Storyboard 会非常卡。
所以我将 Controller 拆分成一个个的 Storyboard 文件。在对应的类中,我需要在每个类都写上一个初始化方法:
1234static func instantiate() -> HomeViewController { return UIStoryboard(name: .home) .instantiateViewControllerWithClass(type: HomeViewController.self)}
当你的 App 页面非常多的时候你会发现到处都是 instantiate() 方法,所以我们需要用 Swift 中强大的 Protocol 思想进行一次优化了。
...
在项目中,往往有这样的要求,用 API 进行登录之后在某个 WKWebView 的页面需要用 cookie 去验证身份(虽然我更喜欢用 accesstoken 去验证🙃)。WKWebView 是苹果官方建议的控件来替代老旧的 UIWebView。但是 WKWebView 的 cookie 无法共享 NSHTTPCookieStorage,所以这时候就需要我们自己去管理 cookie。(iOS 11 上新增了 WKHTTPCookieStore 来管理)
首先我们先解析获取到的 cookie
123456789101112131415/// 解析 cookieprivate func analysisCookie(response: HTTPURLResponse) { if let fields = response.allHeaderFields as? [String: String], let url = response.url { let cookies = HTTPCookie.cookies(withR ...
在将项目迁移到 Swift 3.1 后,我受到了几个警告的欢迎。它们似乎都没有特别难以修复,只是除了这个之外:
Method ‘initialize()’ defines Objective-C class method ‘initialize’, which is not guaranteed to be invoked by Swift and will be disallowed in future versions.
Ouch。一些类重写了 NSObject 的 initialize() 函数,警告清楚地表明这已不在合适(或者至少,但它应该不会很快发生)。一个非常类似的方法 - load(),它自 Swift 1.2 以来一直没有,所以看起来初始化将很快跟进。它扮演着一个独特的角色,如 NSObject 文档所述:
The runtime sends initialize() to each class in a program just before the class, or any class that inherits from it, is sent its f ...
问
我有一个带有 largeTitle 和 searchcontroller 的 navigationBar ,我的 tableView 有一个 refreshcontrol 。
当我拉动刷新时,refreshcontrol 的 activityIndicator 消失了,但是刷新过程仍然在继续,即使进程完成并且我调用 UIRefreshControll 的 endRefreshing() 方法,导航栏也不会恢复到正常大小。
有人遇到过同样的问题吗?
答
我已经找了几个星期,今天我终于找到了解决方案,终于成功了。解决的方式非常简单,我不敢相信我竟然没有早点找到。
我正在使用带有 UITableView 的普通 UIViewController。我将约束设置成上与下都是 0,如图所示:
一次,我改变了约束,将 UITableView 约束相对于 Superview 的所有边缘,值均为0,然后它竟然开始工作了:
我甚至没有设置任何其他东西。我非常希望这能为你解决这个问题,因为它太烦人了……
原文:iOS 11 UIRefreshControl with NavigationBa ...