2015-10-26 2 views
1

Я пытаюсь сохранить кортеж в NSUserDefaults. Мой кортеж внизу.Swift: невозможно сохранить кортежи с большим количеством записей в NSUserDefaults

var primaryNumberAndName: [(name:String , number: String, numberType: String, imageProfile: UIImage, imageLogo: UIImage)] = [] 

Добавление ДАННЫЕ кортежам

for (var i : Int = 0; i < primaryNameArr.count; i++) 
     { 
      primaryNumberAndName.append(name: primaryNameArr[i] as! String, 
number: primaryNumberArr[i] as! String, 
numberType: primaryNumberTypeArr[i] as! String, 
imageProfile: UIImage(named: "profile_man.png")!, 
imageLogo: UIImage(named: "Our_Logo.png")!) 

     } 

Coding:

var dictOfObjectsData = NSKeyedArchiver.archivedDataWithRootObject(primaryNumberAndName) 
myUserDefaul.setObject(dictOfObjectsData, forKey: "PrimaryContacts") 

Ошибка:

Cannot invoke 'archivedDataWithRootObject' with an argument list of type {[(name:String , number: String, numberType: String, imageProfile: UIImage, imageLogo: UIImage)]} 

Просьба посоветуйте мне, как это решить.

+1

Перед его хранением необходимо преобразовать его в NSData. Вам нужен класс, а не кортеж –

+0

, как это решить? PLS руководство меня. –

+1

http://stackoverflow.com/questions/33192675/using-nsuserdefaults-on-arrays –

ответ

1

Одним из вариантов может быть преобразование tuple в Dictionary перед его сохранением. Что-то вроде этого:

let primaryNumberKey = "primaryNumber" 
let nameKey = "name" 

func serializeTuple(tuple: AccessTuple) -> myDictionary { 
    return [ 
     primaryNumberKey : tuple.primaryNumber, 
     nameKey : tuple.name 
    ] 
} 

func deserializeDictionary(dictionary: myDictionary) -> myTuple { 
    return myTuple (
     dictionary[primaryNumberKey] as String!, 
     dictionary[nameKey] as String! 
    ) 
} 

Это, как вы можете использовать его:

// Writing to defaults 
let myConvertedDictionary = serializeTuple(myTuple) 
NSUserDefaults.standardUserDefaults().setObject(myConvertedDictionary, forKey: "UserDetailslKey") 

// Reading from defaults 
let myFetchedDictionary = NSUserDefaults.standardUserDefaults().dictionaryForKey("UserDetailslKey") as myDictionary 
let myFetchedTuple = deserializeDictionary(myFetchedDictionary) 

Вы можете теперь Архив СЛОВАРЬ регулярный путь!

+0

Теперь, если я напечатаю свои кортежи, он покажет 100 записей. Это нужно сохранить в пользовательских настройках по умолчанию. Возможно ли с вышеуказанным кодом? –

+0

Как я могу преобразовать все данные в словарь? Я не знаю логики в цикле. Pls guide me @Abhinav –

+0

Вы имеете в виду, что у вас есть кортеж с 100 параметрами? – Abhinav

Смежные вопросы