Swift, как я могу сохранить контакты по умолчанию

Доброе утро всем, я следовал этому руководству. Я могу добавить новый контакт и получить существующие контакты, но я пытаюсь сохранить список, который я добавляю в mutableArray, и использовать этот массив для заполнения моего TableView. я получаю эту ошибку

Контакты Введение[5166:4971615] *** Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «Попытка вставить объект списка, не относящийся к свойствам («!$_, value=>\»\n), emailAddresses=(\ n \"!$_, value=>\"\n), postalAddresses=(\n)>" ) для ключевых контактовKey'

Здесь

 func insertNewObject(sender: NSNotification) {

        print("How Many Times am I getting here ??")

        if let contact = sender.userInfo?["contactToAdd"] as? CNContact {
            objects.insert(contact, atIndex: 0)
            let indexPath = NSIndexPath(forRow: 0, inSection: 0)
            self.tableView.insertRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
        }

        print("How Many Objects ",objects.count)

        let contactArray = objects as [CNContact]
        let prefs = NSUserDefaults.standardUserDefaults()
        prefs.setValue(contactArray, forKey: "contactsKey")

    }

Любая помощь приветствуется.

С уважением JZ


person John Z    schedule 25.05.2016    source источник
comment
Чтобы сохранить массив объектов в пользовательских значениях по умолчанию, объекты должны относиться к типам, допустимым для списка свойств. (developer.apple.com/library/mac /documentation/Cocoa/Conceptual/) Можете ли вы вместо этого использовать строку контакта identifier (и искать контакт, когда вам это нужно)?   -  person Phillip Mills    schedule 25.05.2016


Ответы (1)


NSUserDefaults поддерживается список свойств, поэтому в него можно добавлять только те объекты, которые являются объектами списка свойств (см. список совместимых объектов здесь).

CNContact нет в этом списке, поэтому вы не можете добавить его напрямую в NSUserDefaults.

Один из способов обойти это — сериализовать/десериализовать объект CNContact вручную во что-то совместимое, например NSDictionary или NSData (как в этом ответе ), который затем можно сохранить в NSUserDefaults.

person nebs    schedule 25.05.2016