2017-03-08 14 views
0

코어 데이터를 사용하고 있으며 속성을 읽으려고하면 0과 1 같은 숫자로 읽습니다. 여기에 내 핵심 데이터가 있습니다. 설정. 내 마지막 목표는 true 또는 false로 부울을 저장 한 다음 그 값을 읽는 것입니다. 설치 과정에서 잘못되었거나 뭔가 빠졌습니까? 나는 그 게시물을 보았습니다 iPhone: Save boolean into Core Data OBJ C에있는 것 외에도, 나는 이제 데이터 모델 옵션에서 부울을 사용할 수 있다고 믿습니다.코어 데이터를 사용하고 있으며 내 불리언 값은 숫자로 읽습니다.

func saveFilters(bathAny: Bool, bath1: Bool, bath2: Bool, bath3: Bool, bath4: Bool){ 
    let context = getContext() 

    let entity = NSEntityDescription.entity(forEntityName: "FilterCoreDataObj", in: context) 
    let transc = NSManagedObject(entity: entity!, insertInto: context) 

    //SET ENTITY VALUES 

    transc.setValue(bathAny, forKey: "bathAny") 
    transc.setValue(bath1, forKey: "bath1") 
    transc.setValue(bath2, forKey: "bath2") 
    transc.setValue(bath3, forKey: "bath3") 
    transc.setValue(bath4, forKey: "bath4") 


    do { 
     try context.save() 
     print("saved") 
    } catch let error as NSError { 
     print("could not save \(error), \(error.userInfo)") 
    } catch { 

    } 
} 

읽기 Func을

func getTranscriptions(bathAny: Bool, bath1: Bool, bath2: Bool, bath3: Bool, bath4: Bool) { 
    let fetchRequest: NSFetchRequest<FilterCoreDataObj> = FilterCoreDataObj.fetchRequest() 

    do { 
     let searchResults = try getContext().fetch(fetchRequest) 
     print("num of results = \(searchResults.count)") 
     for trans in searchResults { 
      print("bath 1 \(trans.value(forKey: "bath1"))") 


     } 


    } catch { 
     print("Error with request: \(error)") 
    } 

} 
+2

가능한 복제본 : [iPhone : 부울을 코어 데이터에 저장] (http://stackoverflow.com/questions/2937945/iphone-save-boolean-into-core-data) – keithbhunter

+0

이것은 매우 신속하며 핵심 데이터가 lot 3을 사용하십시오. 또한 datModel에서 속성을 다음과 같이 설정할 수 있습니다. 부울 –

답변

2

당신이 속성을 선택하면, 당신은 Bool 직접 작업 할 수 있도록하는 '사용 스칼라 형'옵션이있는 '데이터 모델 관리자'탭을 엽니 다 유형이 기본 NSNumber 값 대신 사용됩니다. (자동이 오브젝트 서브 클래스를 관리 생성과)

enter image description here

내가 스위프트 3 사항을 확인 할 수 있습니다이 상자 밖으로 작동합니다.

NSManagedObject 하위 클래스 (또는 확장자)를 직접 만드는 경우 속성을 노출해야합니다.

p.s. 보조 노트로, 당신이 프로젝트는 현재 NSManagedObjects에 대한 하위 클래스 또는 확장을 사용하지 않는 것 같아요. CoreData를 처음 사용하는 경우 CoreData 도구가 Xcode 8로 극적으로 바뀌었기 때문에 혼란스러운 주제가 될 수 있습니다.

간단한 소개로 엔티티에 대한 하위 클래스 (또는 확장)를 수동으로 만들거나 환경 설정 - Xcode가 자동으로 생성하도록하십시오.) 귀하의 경우에는

확장은 다음과 같이 보일 것이다 : 당신이 주요 경로에 대한 문자열을 사용하지 않고 직접 속성에 액세스 할 수 있기 때문에 그런 엔티티를 사용하여

extension FilterCoreDataObj { 
    @NSManaged public var bathAny: Bool 
    @NSManaged public var bath1: Bool 
    @NSManaged public var bath2: Bool 
    @NSManaged public var bath3: Bool 
    @NSManaged public var bath4: Bool 
} 

훨씬 쉬워집니다 :

func saveFilters(bathAny: Bool, bath1: Bool, bath2: Bool, bath3: Bool, bath4: Bool){ 

    let context = getContext() 

    let transc = FilterCoreDataObj(context: context) 
    //SET ENTITY VALUES 

    transc.bathAny = bathAny 
    transc.bath1 = bath1 
    transc.bath2 = bath2 
    transc.bath3 = bath3 
    transc.bath4 = bath4 

    do { 
     try context.save() 
     print("saved") 
    } catch let error as NSError { 
     print("could not save \(error), \(error.userInfo)") 
    } catch { 

    } 
} 
+0

생명의 은인 답변에 감사드립니다 !! –

+0

핵심 데이터에 대해 한 가지 더 질문 할 수 있는지 궁금합니다. 그래서 코어 데이터를 가진 커스텀 객체 배열을 저장하려고합니다. 커스텀 오브젝트는 이미 존재하지만, 글쓰기와 저장 방법에 대해서는 잘 모르겠습니다. 맞춤 개체를 저장할 수 있습니까? 그리고 만약 그렇다면, 그것은 속성일까요? 그리고 그 타입을 어떻게 바꾸었을까요? 또는 객체의 클래스를 만들고 객체에있는 것과 일치하도록 모든 속성을 설정하겠습니까? 도와 줘서 고마워. 나는 당신이 거기에서 대답 할 수 있기를 바라면 다른 질문으로 이것을 열어 놓을 것이다. –

+0

사용자 지정 개체를 자체 CoreData 엔터티로 모델링하지 않으려면 'transformable' 특성을 사용하여 사용자 지정 개체를 저장할 수 있습니다. 여기서 간단한 대답은 핵심 데이터 저장소가 객체를 바이너리 BLOB로 저장하여 저장할 수 있도록 사용자 정의 객체가 NSCoding 프로토콜을 구현하도록하는 것입니다. 관련 질문을 찾으려고 노력했지만 놀랍게도 (스위프트에 대해) 아직 질문을받지 못했습니다. – MathewS