1

Привет У меня есть NSMutablearray, и я пытаюсь сохранить этот массив в NSUserdefault, но я получаю сообщение об ошибке при его хранении.Не удается сохранить значение NSMutableArray в NSUserdefault в swift

var mutableArray: [(name: String, id: String)] = [] 

NSUserDefaults.standardUserDefaults().setObject(mutableArray, forKey: "arrayKey") 

Невозможно преобразовать значение типа '[(name: String, id: String)] 'ожидаемого типа аргумента 'AnyObject?.

Thanx :)

+3

Вы не можете хранить кортежи в NSUserDefaults, только объекты, соответствующие NSObject. – Moritz

+0

Спасибо @EricD., Есть ли альтернативные способы решения этой проблемы. – user3820661

+3

Возможный дубликат [Сохранить кортеж в NSUserDefaults] (http://stackoverflow.com/questions/27896642/save-a-tuple-in-nsuserdefaults) :) – Moritz

ответ

0

я придумал возможное решение с некоторыми испытаний на детской площадке. В принципе, мы преобразуем NSMutableArray в стандартный массив, затем в строку, затем мы аккуратно создаем строку, затем сохраняем ее в NSUserDefaults. Позже мы получаем доступ к нему из NSUserDefaults, преобразуем его в стандартный массив, а затем, наконец, преобразуем его обратно в тот же NSMutableArray. Вот код ...

var mutarray:NSMutableArray = ["yo", "oy", "pppppp", "01", "long: on", "off"] // just some sample NSMutableArray, replace this with your actual NSMutableArray 

var arraytoarray = mutarray as NSArray as! [String] // We convert that NSMutableArray to a standard array of strings 

var arraystring = String(arraytoarray) // we convert that standard array to one long string 

// then, below, we optimize it and remove characters that will mess up your process later (this might take some tinkering based on your array, but I don't think so) 

arraystring = arraystring.stringByReplacingOccurrencesOfString("\"", withString: "") 
arraystring = arraystring.stringByReplacingOccurrencesOfString("[", withString: "") 
arraystring = arraystring.stringByReplacingOccurrencesOfString("]", withString: "") 
arraystring = arraystring.stringByReplacingOccurrencesOfString(" ", withString: "") 


// then we create an NSUserDefault of that string we've created 
let defaults = NSUserDefaults.standardUserDefaults() 
defaults.setObject("arraystring", forKey: "stringkey") 


// then later on we read that string and create the variable 'name' for it. 
if let name = defaults.stringForKey("stringkey") { 

print(name) 

// we then convert it to an array again 
let fullNameArr = name.characters.split{$0 == ","}.map(String.init) 

print(fullNameArr) 

// and finally back to an NSMutableArray (if necessary) 
var nsMutableArray = NSMutableArray(array: fullNameArr) 

} else { 
// this is triggered if NSUserDefault was not saved above, in error. 
print("nope") 
} 

Надеюсь, это вам поможет!

+0

Привет @ user3820661 дайте мне знать, если это поможет вам! – owlswipe