2017-02-11 9 views
0

나는 saveuser() 메서드를 사용하는 사용자 Class을 응용 프로그램이 종료 될 때마다 가지고 있습니다. 사용자는 서브 클래스 NSObjectClasses 사용자 지정 Arrays 두 개가 있습니다. 여기 내 인코딩 방법입니다.NSCoder가있는 인코딩 배열

func encode(with aCoder: NSCoder) { 
    aCoder.encode(self.firstName, forKey: coderKey.fName) 
    aCoder.encode(self.lastName, forKey: coderKey.lName) 
    aCoder.encode(self.bio, forKey: coderKey.bio) 
    aCoder.encode(self.tags, forKey: coderKey.tags) 
    aCoder.encode(self.organizations, forKey: coderKey.orgs) 
    aCoder.encode(self.img, forKey: coderKey.img) 
} 

self.tags을 인코딩 할 때 앱이 다운됩니다. 나는 self.organizations을 가지고 있기 때문에 arrayNSObjects이고, self.img 일 수도 있기 때문에 UIImage이기 때문에 동일하게 처리된다고 가정합니다. 여기에 내가 얻는 오류가있다.

인해 캐치되지 않는 'NSInvalidArgumentException'예외 응용 프로그램 종료, 이유는 : -

'[Social_Justice.Tag encodeWithCoder :] 인스턴스 0x60000005efc0에 인식 할 수없는 선택기를 보내'내가이 문제를 해결하려면 어떻게해야합니까? 더 이상 코드가 필요하면 주석을 달아 편집 해 보겠습니다.

+2

두 개의 사용자 정의 클래스도 NSCoding을 구현해야합니다. –

답변

0

David Berry가 원래 게시물에 댓글을 달았습니다. 인코딩하려는 사용자 정의 클래스를 확인하고 NSCoder를 준수해야합니다. 그들은 아카이브 경로를 가질 필요가 없습니다. 단지 인코딩 및 디코딩 기능 만 있으면됩니다.

0

는 답 :

  1. 나는이 태그기구

  2. 있는 배열 self.tag 및 self.organization 의 내부 객체의 클래스 이름을 가정
  3. Objective-C는 매우 다른 함수 호출 스타일을 사용합니다. Swift에서 ObjectName.function() 스타일과 동등한 [ClassName/ObjectName methodName]을 보면 잠시 동안이 방법을 사용 해보자. Swift 컴파일러는 앞으로 더 나을 것이고, 디버깅 할 때 objctive-C 경고가 더 이상 표시되지 않을 것입니다.

  4. 선택자은 Objective-C에서 사용하는 용어로, 이것이 방법이라고 생각할 수 있습니다. 따라서이 인식 할 수없는 선택기 오류 경고는 코드 내에 실제로 객체 내에 존재하지 않는 encodeWithCode()이라는 메서드를 호출하려고했음을 알립니다. 태그조직 (NSCoder 시스템은 배열을 인코딩하는 방법을 알고 있지만 인코딩 할 생각은 없습니다. 배열 내 자신의 개체)

  5. 당신이 개체의 NSCoder 시스템의 5 개 구체적인 클래스를 사용하려는 경우, 객체 MUSTNSCoding 프로토콜을 준수합니다.그것은 NSCoder의 4 개 구체적인 클래스는 init?(coder: NSCoder)func encode(with: NSCoder)

  6. 구현해야하는 클래스 (태그기구)을 의미 NSArchiver, NSUnarchiver, NSKeyedArchiver, NSKeyedUnarchiver, and NSPortCoder.

더 읽을 거리 :

NSCoding/NSKeyed​Archiver By NSHipster

또는 (내가 좋아하는)

Apple Document NSKeyedArchiver

Apple Document NSCoding

또는

Apple Document NSCoder : (해당 문서가 아직 있다면 조금 당신을 위해 혼란)

Hollemans M. 2016, iOS Apprentice 제 5 판 자습서 2 Checklist, pp 126 ~ pp 137