В приложении, которое я разрабатываю, пользователю необходимо добавить «предприятие» для использования этого приложения. Однако они могут добавить в приложение более одного «предприятия». Каждому добавленному предприятию нужны две вещи: имя и ключ корпоративного предприятия.iOS - Локальное сохранение массива пар значений ключа
Я создал «Enterprise» класс:
class Enterprise : NSObject {
var name:String!
var apiKey:String!
init (name:String, apiKey:String) {
self.name = name
self.apiKey = apiKey
}
required init(coder decoder: NSCoder) {
self.name = decoder.decodeObjectForKey("name") as String
self.apiKey = decoder.decodeObjectForKey("apiKey") as String
super.init()
}
func encodeWithCoder(coder: NSCoder) {
coder.encodeObject(self.name, forKey: "name")
coder.encodeObject(self.apiKey, forKey: "apiKey")
}
}
Одно замечание об этом классе, в примере, я следовал, чтобы построить этот класс они суб-Оценен класс как NSCoder, а также NSObject однако, если я добавил «NSCoder» в классе, я получаю следующее сообщение об ошибке:
Multiple inheritance from classes 'NSObject' and 'NSCoder'
При сохранении массива я использую следующее:
let name = self.enterpriseName.text
let key = self.apiKey.text
if name != "" {
if key != "" {
let defaults = NSUserDefaults.standardUserDefaults()
let objectKey = "enterprise"
var ent = [Enterprise(name: name, apiKey: key)]
var entData = NSKeyedArchiver.archivedDataWithRootObject(ent)
defaults.setObject(entData, forKey: objectKey)
defaults.synchronize()
}
else {
println("No API key")
}
}
else {
println("No name")
}
Это похоже на работу при сохранении одного значения, но когда я проверяю, сколько элементов находится в массиве при запуске, оно показывает только 1.
Любые идеи, как я могу это сделать? Конечный результат я ищу будет что-то вроде:
Enterprises:
Enterprise
name: abc
apiKey: 184nfh692j6j31))8dx
Enterprise
name: def
apiKey: 23oih9823tng893g2gd
Enterprise:
name: ghi
apiKey: sfgYSS4yw44gw31!#%q
С возможностью удаления конкретного предприятия из списка, если пользователь может выбрать, чтобы удалить его.
EDIT
Вот что получилось, используя метод (ниже, и принял ответ) Леонардо:
let name = self.enterpriseName.text
let apiKey = self.apiKey.text
if name != "" {
if apiKey != "" {
var enterprises = NSMutableDictionary()
var loadedEnterprises = Load.dictionary("enterprises")
if loadedEnterprises != nil {
if(loadedEnterprises.count > 0) {
for (key, value) in loadedEnterprises {
enterprises.setObject(value, forKey: key as String)
}
}
}
enterprises.setObject(apiKey, forKey: name)
Save.dictionary("enterprises", enterprises)
}
else {
println("No API key")
}
}
else {
println("No name")
}
Вы реализуете 'NSCoding', а не вспомогательный класс' NSCoder' – Wain