2017-10-31 10 views
0

CNContactの詳細をUserDefaultsに保存しようとしていますが、失敗します。 保存できる他の方法CNContactCNContactをUserDefaultsに保存する

struct User { 
    var firstName: String = "" 
    var lastName: String = "" 
    var email: String = "" 
    var phoneNumber: String = "" 
    var company: String = "" 
    var assistantContact: CNContact? 

    init(firstName: String, lastName: String, email: String, phoneNumber: String, company: String, assistantContact: CNContact? = nil) { 
     self.firstName = firstName 
     self.lastName = lastName 
     self.email = email 
     self.phoneNumber = phoneNumber 
     self.company = company 
     self.assistantContact = assistantContact 
    } 

    func encode() -> Dictionary<String, AnyObject> { 

     var dictionary : Dictionary = Dictionary<String, AnyObject>() 
     dictionary["firstName"] = firstName as AnyObject? 
     dictionary["lastName"] = lastName as AnyObject? 
     dictionary["email"] = email as AnyObject? 
     dictionary["phoneNumber"] = phoneNumber as AnyObject? 
     dictionary["company"] = company as AnyObject? 
     dictionary["assistantContact"] = assistantContact as AnyObject? 
     return dictionary 

    } 

    init(dictionary: Dictionary<String, AnyObject>) { 
     if let firstName = dictionary["firstName"] as? String { 
      self.firstName = firstName 
     } 
     if let lastName = dictionary["lastName"] as? String { 
      self.lastName = lastName 
     } 
     if let email = dictionary["email"] as? String { 
      self.email = email 
     } 
     if let phoneNumber = dictionary["phoneNumber"] as? String { 
      self.phoneNumber = phoneNumber 
     } 
     if let company = dictionary["company"] as? String { 
      self.company = company 
     } 
     if let assistantContact = dictionary["assistantContact"] as? CNContact { 
      self.assistantContact = assistantContact 
     } 
    } 

} 
+0

コードのためには、一度 –

+1

UserDefaults' 'のドキュメントから表示してくださいクラッシュし、デフォルトでその連絡先を保存するために書いた:* UserDefaultsクラスは、このような一般的なタイプにアクセスするための便利なメソッドを提供します浮動小数点数、倍精度値、整数、ブール値、およびURLとして扱われます。デフォルトオブジェクトは、NSData、NSString、NSNumber、NSDate、NSArray、またはNSDictionaryのインスタンス(またはコレクション、インスタンスの組み合わせ)のプロパティリストでなければなりません。他のタイプのオブジェクトを保存する場合は、通常はNSDataのインスタンスを作成するためにアーカイブする必要があります。詳細は、設定と設定のプログラミングガイドを参照してください。* CNContactはリストされていません。 – rmaddy

+0

@iOSGeek UserDefaults.standard.set(currentUser.encode()、forKey:AppConstants.kLoggedInUser)。 currentUser.encode()でクラッシュする – Nitesh

答えて

0

最初にエンコードする連絡先配列。

let encodedData: Data = NSKeyedArchiver.archivedData(withRootObject: contactsArray) 

ここで、encodedDataをUserDefaultsに保存します。

は、デコード接点配列、

if let contacts: [CNContact] = decodedData as? [CNContact] { 
      //Decoded Contacts Array 
} 
関連する問題