2015-11-06 70 views
3

我做了一個應用程序,我想添加功能,當應用程序的互聯網可達性發生變化時通知用戶。通知用戶可達性(阿什利米爾斯的可達性)

我使用Ashley Mills的Reachability.swift文件。

現在我明白它是如何工作的,所以我放置了代碼,當互聯網可訪問性發生變化時,它將在appDelegate中打印它的狀態。

但是,當我試圖把警報用戶沒有互聯網連接的功能,它會得到一個錯誤。

這裏是我的代碼在應用程序委託。

class AppDelegate: UIResponder, UIApplicationDelegate { 

var window: UIWindow? 

var reachability : Reachability? 

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
do { 
     let reachability = try Reachability.reachabilityForInternetConnection() 
     self.reachability = reachability 
    } catch ReachabilityError.FailedToCreateWithAddress(let address) { 

    } 
    catch {} 

    NSNotificationCenter.defaultCenter().addObserver(self, selector: "reachabilityChanged:", name: ReachabilityChangedNotification, object: reachability) 
    do { 
     try reachability?.startNotifier() 
    } catch {} 

    return true 
} 

func reachabilityChanged(notification: NSNotification) { 
    let reachability = notification.object as! Reachability 

    if reachability.isReachable() { 

     print("reached") 
    } else { 


     print("not reached") 
    } 
} 

這很好。 然而,代碼的viewController,

class ViewController: UIViewController { 
var reachability : Reachability? 
@IBOutlet weak var label: UILabel! 
@IBOutlet weak var textField: UITextField! 
override func viewDidLoad() { 
    super.viewDidLoad() 

NSNotificationCenter.defaultCenter().addObserver(self, selector: "HeyUserInternetDoesntWork", name: ReachabilityChangedNotification, object: nil) 
    //get call from appDelegate Notification. 
    } 


func HeyUserInternetDoesntWork() { 


    if reachability!.isReachable() { 

     print("notify User working") 
    } else { 


     print("Notify user not working") 
    } 
} 

意外發現零而展開的可選值

它得到這個錯誤。

我打算在工作後提醒用戶的代碼。

的問題在這裏,

我怎樣才能讓這項工作? 它不一定要用那種方法,但我想繼續使用NSNotification。 其實我是一個編碼的新人,所以請詳細解釋一下。

回答

2

你在哪裏可達性屬性?這個變量總是零。 在func HeyUserInternetDoesntWork中嘗試使用可達性,當然它會得到錯誤。你需要初始化屬性是這樣的:

private let reachability = Reachability.reachabilityForInternetConnection() 

使用後,像這樣「動態」關鍵字FUNC HeyUserInternetDoesntWork:

dynamic func HeyUserInternetDoesntWork() { 

if reachability!.isReachable() { 

    print("notify User working") 
} else { 


    print("Notify user not working") 
} 
} 

因爲NSNotificationCenter觀察者選擇應該是動態的。

+0

做{ 讓利可達=嘗試Reachability.reachabilityForInternetConnection() self.reachability =可達 }趕上ReachabilityError.FailedToCreateWithAddress(讓地址){ } 趕上{} 我把這個,而不是你的初始化屬性,那麼工作正常!謝謝 –

+0

哦,多一個,我寫警告代碼,但我有這個錯誤。 > 2015-11-07 00:50:42.629 practiceParse [4799:2278456]試圖在釋放視圖控制器時加載視圖控制器的視圖是不允許的,並且可能導致未定義的行爲,你知道什麼是錯誤的嗎? –

+0

請問這是一個新的問題 –