저는 Swift에서 개발 중입니다. nsuserdefaults
을 통해 맞춤 데이터를 저장하고 싶습니다.신속하게 nsuserdefaults를 통해 CBPeripheral과 같은 사용자 정의 데이터를 저장하는 방법은 무엇입니까?
내 사용자 정의 데이터는 내가 데이터를 저장하려고하면이 ViewController.swift
var userDefault = NSUserDefaults.standardUserDefaults()
var BLEConnectedDevice:[ConnectedDevice] = [ConnectedDevice]()
에서 ConnectedDevice.swift
import UIKit
import Foundation
import CoreBluetooth
import CoreLocation
class ConnectedDevice : NSObject , NSCoding{
var RSSI_threshold:NSNumber=0
var Current_RSSI:NSNumber=0
var name:String?
var bdAddr:NSUUID?
var ConnectState:Bool=false
var AlertState:Int=0
var BLEPeripheral : CBPeripheral!
var DisconnectAddress:[String] = [String]()
var DisconnectTime:[String] = [String]()
var Battery:NSInteger=0
var Location:[CLLocation] = [CLLocation]()
var AlertStatus:Int!
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(RSSI_threshold, forKey: "RSSI_threshold")
aCoder.encodeObject(Current_RSSI, forKey: "Current_RSSI")
aCoder.encodeObject(name, forKey: "name")
aCoder.encodeObject(bdAddr, forKey: "bdAddr")
aCoder.encodeBool(ConnectState, forKey: "ConnectState")
aCoder.encodeInteger(AlertState, forKey: "AlertState")
aCoder.encodeObject(BLEPeripheral, forKey: "BLEPeripheral")
aCoder.encodeObject(DisconnectAddress, forKey: "DisconnectAddress")
aCoder.encodeObject(DisconnectTime, forKey: "DisconnectTime")
aCoder.encodeObject(Battery, forKey: "Battery")
aCoder.encodeObject(Location, forKey: "Location")
aCoder.encodeObject(AlertStatus, forKey: "AlertStatus")
}
override init() {
}
required init?(coder aDecoder: NSCoder) {
self.RSSI_threshold = aDecoder.decodeObjectForKey("RSSI_threshold") as! NSNumber
self.Current_RSSI = aDecoder.decodeObjectForKey("Current_RSSI") as! NSNumber
self.name = aDecoder.decodeObjectForKey("name") as? String
self.bdAddr = aDecoder.decodeObjectForKey("bdAddr") as? NSUUID
self.ConnectState = aDecoder.decodeObjectForKey("ConnectState") as! Bool
self.AlertState = aDecoder.decodeObjectForKey("AlertState") as! Int
self.BLEPeripheral = aDecoder.decodeObjectForKey("BLEPeripheral") as! CBPeripheral
self.DisconnectAddress = aDecoder.decodeObjectForKey("DisconnectAddress") as! [String]
self.DisconnectTime = aDecoder.decodeObjectForKey("DisconnectTime") as! [String]
self.Battery = aDecoder.decodeObjectForKey("Battery") as! NSInteger
self.Location = aDecoder.decodeObjectForKey("Location") as! [CLLocation]
self.AlertStatus = aDecoder.decodeObjectForKey("AlertStatus") as! Int
}
}
에서
다음과 같다 다음 코드를 사용하십시오.
내가 데이터를로드 할 때let data = NSKeyedArchiver.archivedDataWithRootObject(BLEConnectedDevice)
NSUserDefaults.standardUserDefaults().setObject(data, forKey: "BLEConnectedDevice")
userDefault.synchronize()
, 나는 다음과 같은 코드를 사용합니다
if let Data = NSUserDefaults.standardUserDefaults().objectForKey("BLEConnectedDevice") as? NSData {
if let devcie = NSKeyedUnarchiver.unarchiveObjectWithData(Data) as? ConnectedDevice {
print("NSUserDefaults = \(devcie.name)")
}
}
을하지만 aCoder.encodeObject(BLEPeripheral, forKey: "BLEPeripheral")
에 오류가 표시되고 오류 로그는
2016-08-24 18:37:57.022 Anti-Lost[476:222607] -[CBPeripheral encodeWithCoder:]: unrecognized selector sent to instance 0x14e9fc60
2016-08-24 18:37:57.024 Anti-Lost[476:222607] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[CBPeripheral encodeWithCoder:]: unrecognized selector sent to instance 0x14e9fc60'
어떻게 인코딩하는 방법입니다 CBPeripheral
?
내가 누락 되었습니까? nsuserdefaults
을 통해 맞춤 데이터를 신속하게 저장하는 방법은 무엇입니까?
'CBPeripheral'은'NSCoding'을 따르지 않습니다. 당신은 그것을 저장할 수 없습니다. 당신은 그것에 관하여 "재미있는 정보"만 저장하고 싶을지도 모르지만, 이렇게 저장할 수는 없습니다. – Larme