2016-09-26 3 views
1

CoreData를 사용하는 데있어 새로운 경험이 있습니다. I 기본 저장 클래스가 관심 지점에 대한 좌표 정보를 갖고,이 클래스에 대한 코드는 다음내 데이터 모델이 목적에 적합한가요?

import Foundation 
class StopAttributes: NSObject, NSCoding{ 
    var latitude: Double! 
    var longitude: Double! 
    var state: String! 

    func encodeWithCoder(aCoder: NSCoder) { 
     aCoder.encodeDouble(latitude, forKey: "latitude") 
     aCoder.encodeDouble(longitude, forKey: "longitude") 
     aCoder.encodeObject(state, forKey: "state") 
    } 

    required init?(coder aDecoder: NSCoder) { 
     latitude = aDecoder.decodeDoubleForKey("latitude") 
     longitude = aDecoder.decodeDoubleForKey("longitude") 
     state = aDecoder.decodeObjectForKey("state") as! String 
    } 

    override init() { 
     super.init() 

    } 
} 

I 좋아해서 상술 한 클래스의 배열을 가지고 또한

var unsortedStopsData: [StopAttributes] = [StopAttributes]() 

를 I은 이 배열에 약 3000 개의 항목을 채 웁니다. CoreData를 사용하여이 배열을 저장하고 싶습니다. 나는 그렇게처럼 내 데이터 모델을 정의했습니다 :

enter image description here

마지막으로, 내 관리 객체 클래스의 서브 클래스를 만들어 [StopAttributes]unsortedStopsData 주조이 클래스 내에서 StopAttributes 내 배열을 절약 할 수. 제 질문은, 데이터 모델을 올바르게 설계하고 있습니까? 안되면 조언 좀 해줄 수 있니?

답변

1

어떤 데이터 모델이 어떤 목적에 적합한 지 여부는 데이터를 저장 한 후 데이터를 사용하려는 방법에 따라 다릅니다. 모델에 데이터가 저장됩니다. 데이터를 사용해야하는 방식에 적합한 지 여부는 다른 질문입니다.

하나의 변형 가능한 속성을 사용하면 코어 데이터로 수행 할 수있는 모든 작업이 모든 인스턴스를 가져옵니다. 유용한 술어를 구성 할 수 없기 때문에 데이터의 서브 세트를 가져올 수 없습니다. 예를 들어 위도와 경도가 특정 지역에있는 모든 사례를 찾을 수는 없습니다. 그리고 당신은 이름으로 인스턴스를 찾을 수 없습니다. 그게 당신의 필요에 맞는다면 괜찮습니다. 그러나 귀하의 필요가 너무 제한적이라면 Core Data로부터 거의 이익을 얻지 못할 것입니다.

데이터의 하위 집합을 가져와야하는 경우 핵심 데이터 엔티티에 최소한 필터링에 사용할 모든 값에 대한 속성이 있어야합니다. 위도와 경도를 기반으로 인스턴스를 찾고 싶습니까? 그렇다면 속성이어야합니다.

+0

귀하의 설명을 이해 한 결과 위도, 경도 및 상태에 대한 속성을 내 엔터티에 추가하여 3000 개의 값으로 이루어진 전체 배열을 가져 오지 않고 그 중 하나를 통해 StopAttributes의 특정 인스턴스를 검색 할 수 있어야합니다. 맞지? 그렇다면 관계 나 가져온 속성에서 무엇인가를 정의해야합니까? 내 생각 엔 가져온 속성을 추가하는 것입니다. –

+0

세 가지 모두를 사용하여 데이터를 필터링해야하는 경우 (모두 동시에 필요하지는 않음) 그렇다면 세 가지 모두가 필요합니다. 어떻게 든이 관계가있는 다른 엔티티가 없으면 관계가 필요하지 않습니다. 적어도 지금까지 요구 사항에 대한 설명을 기반으로 가져온 속성도 필요하지 않습니다. –

관련 문제