我是新來的swift和iOS。我正在爲一個高中項目開發應用程序。我有兩個文件,每個文件都有一個在其中定義的類。具有相同名稱的類的ViewController和具有一個類BLEManager和另一個BLEHandler的BLEHandler。NSUserDefaults創建全局訪問變量
BLEHandler用於掃描廣告BLE設備並收集這些設備的UUID並將其打印出來。現在,我用「變量」代替UUID
。
我希望能夠在按下按鈕(在ViewController中設置)時將「變量」的值打印到控制檯。這意味着我需要在ViewController
中獲得BLEHandler
的「變量」值。
我在這裏給出了我在userdefaults中設置「變量」的當前代碼。
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject("test", forKey: "variable")
而我的代碼從ViewController
訪問「變量」在這裏給出:
@IBAction func buttonPress(sender: AnyObject) {
let defaults = NSUserDefaults.standardUserDefaults()
let name = defaults.stringForKey("variable")
println(name)
}
好像它應該工作,但我從println(name)
線得到的是nil
... 任何建議?
在此先感謝!
編輯:這裏是完整的代碼,因爲它目前爲:
視圖控制器類:
import UIKit
import Foundation
import CoreBluetooth
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func buttonPress(sender: AnyObject) {
let defaults = NSUserDefaults.standardUserDefaults()
let name = defaults.stringForKey("variable")
println(name)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
BLEHANDLER類:
import Foundation
import CoreBluetooth
class BLEManager{
var centralManager: CBCentralManager!
var bleHandler: BLEHandler
init(){
self.bleHandler=BLEHandler()
self.centralManager=CBCentralManager(delegate:self.bleHandler, queue:nil)
}
}
class BLEHandler: NSObject, CBCentralManagerDelegate{
override init(){
super.init()
}
func centralManagerDidUpdateState(central: CBCentralManager!){
switch(central.state){
case .Unsupported:
println("not supported")
case .Unauthorized:
println("not authorized")
case .Unknown:
println("ble unknown")
case .Resetting:
println("resetting")
case .PoweredOff:
println("powered off")
case .PoweredOn:
println("powered on")
central.scanForPeripheralsWithServices(nil, options: nil)
default:
println("ble default")
}
}
func centralManager(central: CBCentralManager!, didDiscoverPeripheral peripheral: CBPeripheral!, advertisementData: [NSObject:AnyObject]!,RSSI:NSNumber!)
{
central.connectPeripheral(peripheral, options: nil)
var pName=peripheral.name
println("\(pName):\(RSSI) dbm")
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject("test", forKey: "variable")
}
}
好吧,我把它放在viewDidLoad方法,像這樣:'覆蓋FUNC viewDidLoad中(){ 讓默認值= NSUserDefaults.standardUserDefaults() 讓名= defaults.stringForKey(」變量「) println(name) super.viewDidLoad()}'但我仍然得到'nil' –
測試需要在BLEHandler類中定義,因爲這就是它的源頭實際上將被發現的地方......如果我在ViewController中定義它,那麼這看起來否定了NSUserDefaults的整個目的,因爲我可以用另一種方式訪問它,因爲引用將來自在f中定義'test'的同一個類中第一個地方... –
gotcha!那麼在這種情況下,測試就起作用了。當我在同一個類中定義'test'時,我訪問它,NSUserDefaults工作得很好。但是當我在另一個類中定義'test'時,我得到'nil'。 –