2017-10-31 22 views
0

CNContact 세부 정보를 내 UserDefaults에 저장하려고했지만 실패합니다. 다른 방법으로 저장할 수 있습니까 CNContact?CNContact를 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

코드는 UserDefaults''에 대한 문서에서 한 번 –

+1

을 제시해주십시오 충돌 디폴트에 해당 연락처를 저장 썼다 정수, 복소수, 정수, 부울 및 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) 

이제 UserDefaults에 encodedData를 저장하십시오. * UserDefaults 클래스는 일반적인 유형 등을 액세스하기위한 편리한 방법을 제공합니다

디코드 연락처 배열

if let contacts: [CNContact] = decodedData as? [CNContact] { 
      //Decoded Contacts Array 
}