我一直在通过互联网搜索,以找到在iOS中检查互联网连接的最佳方法,该方法适用于IPv4和IPv6网络环境.我发现有很多可能的答案,但很难混淆哪一个适用.我需要做的是以下内容:
// Check for internet connection
if (internetConnectionIsAvailable) {
// make rest calls
}else
// show cached data
}
Run Code Online (Sandbox Code Playgroud)
我在互联网上找到了以下选项.
选项1: 使用apple Reachability类
有了Reachability我可以检查互联网连接如下,这是短而直接的,不必等待任何响应.
- (BOOL)connected
{
Reachability *reachability = [Reachability reachabilityForInternetConnection];
NetworkStatus networkStatus = [reachability currentReachabilityStatus];
return !(networkStatus == NotReachable);
}
- (void)viewDidLoad {
[super viewDidLoad];
if (![self connected]){
// Not connected
}else{
// Connected
}
}
Run Code Online (Sandbox Code Playgroud)
但是这里互联网检查是在飞行前完成的,这违反了WWDC视频上看到的苹果工程师的建议.此外,如果您检查ReadMe.md,则提到Reachability完全支持IPv6.但是如果在Reachability.m中检查了方法reachabilityForInternetConnection,则他们使用了sockaddr_in,但是没有使用sockaddr_in6,这是推荐用于IPv6网络的.所以我不知道它是否适用于IPv6网络.
选项2:使用Alamofire进行连接
只是尝试连接,如stackoverflow中的一个回答.代码如下所示: -
Alamofire.request(.GET,"http://superrandomdomainnamethatisnotused.com/superrandompath").responseString {
(request, response, stringData, error) in
if let networkError …Run Code Online (Sandbox Code Playgroud)我正在开发Mac应用程序。我一直在努力在Mac OS的“ 桌面 ”中创建目录。我在High Sierra上工作。一切正常,但突然之间该应用无法在桌面中创建目录。我收到以下权限错误。我正在使用Xcode 9.3和Swift 4.1。
Error Domain=NSCocoaErrorDomain Code=513 "You don’t have permission to save the file “TestDir” in the folder “Desktop”." UserInfo={NSFilePath=/Users/sj/Library/Containers/com.user.TestSync/Data/Desktop/TestDir, NSUnderlyingError=0x60400044cc60 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
class DBManager: NSObject {
static func getDirectoryPath() -> URL {
let homeDirectory = URL(fileURLWithPath: NSHomeDirectory())
let desktopPath = homeDirectory.appendingPathComponent("Desktop")
let databaseFolder = desktopPath.appendingPathComponent("TestDir")
return databaseFolder
}
static func createFolderIfNotExist() {
let databaseFolder = DBManager.getDirectoryPath()
if !FileManager().fileExists(atPath: databaseFolder.path) {
do {
try FileManager.default.createDirectory(atPath: databaseFolder.path, withIntermediateDirectories: true, attributes: nil)
} …Run Code Online (Sandbox Code Playgroud)