相关疑难解决方法(0)

iOS Alamofire超时且无网络连接

即使没有网络连接,我也会收到超时错误。我正在使用Alamofire发送请求。我已经看到了检查网络连接的方法,例如如何在Swift中使用SCNetworkReachability,但据我所读,最好发送请求而不是在每个请求之前检查网络连接。我的问题是,即使没有网络连接,为什么还会引发超时错误?有没有一种方法可以检查两者之间的距离,还是应该在超时的情况下仅检查网络的可达性。

import Foundation
import Alamofire

var config = URLSessionConfiguration.default
var manager: SessionManager? = nil
var configured: Bool = false
let formatter = DateFormatter()

let postURL = URL(string: "http://httpbin.org/post")!

func postStatus(deviceID: String, status: Bool, latitude: Double, longitude: Double){
    print("\nPosting")

    if(!configured){
        print("Configuring")
        config.timeoutIntervalForResource = 4
        config.timeoutIntervalForRequest = 4
        manager = Alamofire.SessionManager(configuration: config)
        configured = true
    }else{
        print("Configured\n")
    }

    let postData: [String: Any] = ["deviceID": deviceID, "status": 0, "lat": String(latitude), "long": String(longitude), "timestamp": getCurrentTime()]

    manager?.request(postURL, method: HTTPMethod.post, parameters: postData, encoding: JSONEncoding.default, …
Run Code Online (Sandbox Code Playgroud)

networking ios swift alamofire

5
推荐指数
1
解决办法
1009
查看次数

使用NULL作为参数调用函数

我正在尝试使用以下代码加载图像,但我不知道如何在Swift中执行此操作.

CGImage参考说,我应该传递NULL作为参数,但由于NULL是不是斯威夫特语言的一部分,这是不可能的.我是否必须使用UnsafePointer,如果是,如何使用?

var img = CGImageCreateWithPNGDataProvider(CGDataProviderCreateWithFilename("/Resources/image.png"),**?**, true,kCGRenderingIntentDefault)
Run Code Online (Sandbox Code Playgroud)

提前致谢.

swift

4
推荐指数
1
解决办法
2501
查看次数

使用Swift的C API

我正在尝试跟踪网络状态.我查看了FXReachability的代码.具体如下方法.

- (void)setHost:(NSString *)host
{
    if (host != _host)
    {
        if (_reachability)
        {
            SCNetworkReachabilityUnscheduleFromRunLoop(_reachability, CFRunLoopGetMain(), kCFRunLoopCommonModes);
            CFRelease(_reachability);
        }
        _host = [host copy];
        _status = FXReachabilityStatusUnknown;
        _reachability = SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, [_host UTF8String]);
        SCNetworkReachabilityContext context = { 0, ( __bridge void *)self, NULL, NULL, NULL };
        SCNetworkReachabilitySetCallback(_reachability, ONEReachabilityCallback, &context);
        SCNetworkReachabilityScheduleWithRunLoop(_reachability, CFRunLoopGetMain(), kCFRunLoopCommonModes);
    }
}
Run Code Online (Sandbox Code Playgroud)

它的作用是不断检查与指定主机的连接.我正在尝试将此方法转换为Swift,我遇到了一些问题.

1.将主机字符串转换为UTF8.

我必须将主机字符串转换为UTF8并将其传递给SCNetworkReachabilityCreateWithName方法.我无法UTF8String在Objective-C中找到Swift的确切属性.但是,有一个叫做属性utf8String类型.根据文件,

您可以通过迭代其utf8属性来访问String的UTF-8表示.此属性的类型为String.UTF8View,它是无符号8位(UInt8)值的集合,一个用于字符串的UTF-8表示形式中的每个字节:

如何获得字符串的完整UTF8表示而不是无符号8位(UInt8)值的集合?


2. SCNetworkReachabilitySetCallback的回调函数.

此函数的第二个参数需要某种类型SCNetworkReachabilityCallBack.我潜入了源文件,发现它实际上是一个typealias.

typealias SCNetworkReachabilityCallBack = CFunctionPointer<((SCNetworkReachability!, …
Run Code Online (Sandbox Code Playgroud)

c callback utf-8 ios swift

4
推荐指数
1
解决办法
3810
查看次数

iOS中的蜂窝网络的可达性返回False - Swift

我有这个代码用于检查互联网连接,它工作得非常好,直到我更新到Xcode 8和swift 3.现在它对于蜂窝网络返回false,对于WiFi网络则为真,我不知道为什么.

这是代码:

open class Reachability { 

class func isConnectedToNetwork() -> Bool {

    var zeroAddress = sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
    zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress))
    zeroAddress.sin_family = sa_family_t(AF_INET)

    let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) {
        $0.withMemoryRebound(to: sockaddr.self, capacity: 1) {zeroSockAddress in
            SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress)
        }
    }
    var flags: SCNetworkReachabilityFlags = SCNetworkReachabilityFlags(rawValue: 0)
    if SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) == false {
        return false
    }

    let isReachable = flags == .reachable
    let …
Run Code Online (Sandbox Code Playgroud)

iphone reachability ios swift

4
推荐指数
2
解决办法
1196
查看次数

CTTelephonyNetworkInfo 在 iOS 12 上返回 nil

我有以下代码:

let networkStatus = CTTelephonyNetworkInfo()

func getCellularInfo() {
    if #available(iOS 12.0, *) {
        var info = networkStatus.serviceSubscriberCellularProviders
        if let aKey = networkStatus.value(forKey: "serviceSubscriberCellularProvider") {
            print("aKey: \(aKey)")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码返回:

aKey: { 0000000100000001 = "CTCarrier (0x28282e610) {\n\tCarrier name: [Vodacom]\n\tMobile Country Code: [655]\n\tMobile Network Code:[01]\n\tISO Country Code:[za] \n\t允许 VOIP?[是]\n}\n"; }

我对这种方法不熟悉,我如何获取与键关联的值,例如 \n\tMobile Country Code: [655]/n/

key-value ios core-telephony swift

3
推荐指数
1
解决办法
5555
查看次数

Swift 4 XCode 9中的可达性功能

我想在xcode 9中实现可达性功能,但是在达到可达性类时出现此错误,如何解决此错误?“类型为“ SCNetworkReachability的值?” 没有成员“ takeRetainedValue””。这是我的代码

import UIKit
import Foundation
import SystemConfiguration

public class reachability {

    class func isConnectedToNetwork() -> Bool {

        var zeroAddress = sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
        zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress))
        zeroAddress.sin_family = sa_family_t(AF_INET)


        let defaultRouteReachability = withUnsafePointer(&zeroAddress) {
            SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0)).takeRetainedValue()
        }

        var flags: SCNetworkReachabilityFlags = SCNetworkReachabilityFlags(rawValue: 0)
        if SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) == 0 {
            return false
        }

        let isReachable = (flags.rawValue & UInt32(kSCNetworkFlagsReachable)) != 0 …
Run Code Online (Sandbox Code Playgroud)

xcode reachability wkwebview swift4

1
推荐指数
1
解决办法
3001
查看次数

二进制运算符'&'不能应用于'SCNetworkReachabilityFlags'和'Int'类型的操作数

我尝试检查我的应用程序中的互联网连接时收到此错误.

我使用Xcode 7.1.1 Swift 2.0

代码块如下

public class Reach {

class func isConnectedToNetwork() -> Bool {

    var zeroAddress = sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
    zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress))
    zeroAddress.sin_family = sa_family_t(AF_INET)

    let defaultRouteReachability = withUnsafePointer(&zeroAddress, {
        SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0))//.takeRetainedValue()
    })

    var flags: SCNetworkReachabilityFlags = []
    if SCNetworkReachabilityGetFlags( defaultRouteReachability!, &flags) == false {
        return false
    }

    //The following two lines shows the error
    let isReachable = (flags  & (kSCNetworkFlagsReachable)) != …
Run Code Online (Sandbox Code Playgroud)

network-programming ios swift swift2

0
推荐指数
1
解决办法
868
查看次数