2015-01-25 7 views
1

분명히 CloudKit을 사용할 것이므로 정보가 들어있는 기본 데이터 객체를 CKRecord로 정의하는 것이 좋습니다. 그러나, 나는 CKRecord의 클래스를 만드는 방법을 모른다. 특히 "recordType"을 정의하는 방법을 모르겠습니다.CKRecord 클래스를 정의하는 방법

내 특정 질문 : 왜 "self.recordType ="myRecordType "라인이"자기 자신의 recordType에 할당 할 수 없습니까? "라는 오류를 발생 시키는가?이 CKRecord 클래스는 각각 동일한 유형이므로 어떻게해야합니까?

관찰 결과가 있으면 2 차 질문 : CloudKit (읽기 및 쓰기)에서이 클래스의 개체를 쿼리 등에 직접 사용하는 것과 관련된 다른 문제가 있습니까? 유사한 샘플 코드를 어딘가에서 보았습니다. Thx

class testCKRecordClass: CKRecord { 

    override init!(recordType: String!) { 
     self.recordType = "myRecordType" 
    } 

    required init(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

    var title: NSString { 
     get { 
      return self.objectForKey("title") as NSString 
     } 
     set { 
      self.setObject(newValue, forKey: "title") 
     } 
    } 

    var location: CLLocation? { 
     get { 
      return self.objectForKey("location") as? CLLocation 
     } 
     set { 
      self.setObject(newValue, forKey: "location") 
     } 
} 

답변

1

CKRecord는 CloudKit 메서드에서 반환 할 항목입니다. testCKRecordClass (easilly)로 구문 분석 할 수 없습니다. 그래서 이것을 사용하여 CloudKit에 쓰기위한 CKRecord를 생성 할 수 있습니다.

레코드 유형은 CKRecord의 생성자에 의해서만 초기화 될 수 있습니다. 아마도 super.init (recordType)을 호출하면 작동 할 수 있습니다.

가능한 한 쉽게 CloudKit을 사용하는 것처럼 보입니다. 그렇다면 https://github.com/evermeer/EVCloudKitDao을 살펴보세요. Reflection을 사용하여 CKRecord를 구문 분석하는 CloudKit 편의 라이브러리입니다.

+0

감사합니다. 당신은 CloudKit에 저장하기 전에 CKRecord를 생성하기 때문에, CKRecord 클래스를 데이터 덩어리의 객체 모델로 사용하고 싶습니다. 어쩌면 github 프로젝트 링크가 비슷한 것을 할 수도 있습니다. 나는 CloudKit으로 다른 작업을 해왔고 가능하다면 기본적으로 편안하게하고 있습니다. – Narwhal

+1

github 프로젝트는 CloudKit에서 반환 할 수있는 메타 데이터 속성의 필드가 들어있는 기본 클래스를 사용합니다. 객체를 CloudKit에 저장하기 전에 CKRecord를 만들고 해당 객체에 대한 리플렉션을 사용하여 모든 필드를 추가합니다. CloudKit에서 읽을 때 동일한 트릭을 수행하지만 그 반대의 경우를 수행합니다. 이렇게하면 야구에 대한 참조 만 추가하면되므로 추가 코딩이 필요하지 않습니다. –

+0

나는 그것을 가지고 놀 것입니다. 고맙습니다 – Narwhal