programing

iPhone : 핵심 데이터에 부울 저장

projobs 2021. 1. 17. 10:24
반응형

iPhone : 핵심 데이터에 부울 저장


핵심 데이터 속성 중 하나를 부울로 설정했습니다. 이제 설정해야하지만 XCode는 setUseGPS에 응답하지 않을 수 있다고 계속 알려줍니다.

[ride setUseGPS: useGPS.on];

핵심 데이터에서 부울을 설정하는 방법은 무엇입니까? 다른 모든 속성은이 방식으로 설정되며 훌륭하게 작동합니다. 그렇다면 왜 부울이 이런 식으로 설정되지 않는지 확실하지 않습니까?


핵심 데이터에는 부울 유형이 "없지만"NSNumber입니다.

따라서 useGPS = YES와 동등하게 설정합니다.

[entity setUseGPS:[NSNumber numberWithBool:YES]];

그 반대의 경우 :

BOOL isGPSOn = [[entity useGPS] boolValue];

업데이트 : SKG에서 지적했듯이 Objetive-C의 리터럴을 사용하면 이제 더 간단한 방법으로 수행 할 수 있습니다.

[entity setUseGPS:@YES];

BOOL isGPSOn = entity.useGPS.boolValue;

허용 된 답변에 대한 대안으로 다음과 같이 관리되는 개체 인터페이스 정의에서 NSNumber *에서 BOOL로 입력을 간단히 변경할 수 있습니다.

@property (nonatomic) BOOL useGPS;   // Notice that the 'retain' is also removed as we're now dealing with a scalar rather than an NSObject

여기 에서는 다양한 대안 접근 방식에 대해 설명 하지만 Chris Hanson 의 답변은 특히 다음과 같이 저에게 가장 빛을 발했습니다.

필요한 숫자 속성 (부울 속성 포함)이있는 경우 대신 스칼라로 입력하면 Core Data가 올바른 작업을 수행합니다.

@property (비 원자) BOOL isDone;

속성이 선택 사항 인 경우에도 여전히 작동합니다. "없음"을 "거짓"과 결합 할뿐입니다.

더 정렬 된 Cocoa 구현을 위해 :

또 다른 작업은 속성 이름을 "done"으로 지정하고 getter를 "isDone"으로 지정하는 것입니다. 이것이 일반적인 Cocoa 명명 규칙입니다.

@property (비 원자, getter = isDone) BOOL 완료;

그런 다음 "if (item.done) {...}"또는 "item.done = NO;"라고 쓸 수 있습니다. 컴파일러는 여전히 속성에 액세스하기 위해 -isDone을 ​​생성합니다.

Chris에게 감사하고 이것이 누군가에게 도움이되기를 바랍니다.


@RickiG 답변을 보완하기 위해 Swift에서 (최소한 v4.2 이후) a NSNumber에서 a Bool와 그 반대로 만드는 방법 은 다음과 같습니다.

let nsNumberFromBool = NSNumber(booleanLiteral: true) // or false
let boolFromNSNumber = nsNumberFromBool.boolValue

이에 대한 "수정"(IMHO, Apple SDK의 버그)은 CoreData 생성 클래스에 다음 코드를 추가하는 것입니다. 주의 :이 작업을 카테고리, 별도의 파일에서 수행하면 Xcode 내에서 CoreData 클래스를 다시 생성 할 때마다 다시 복사 / 붙여 넣기 할 필요가 없습니다.

- (BOOL)useGPS
{
    [self willAccessValueForKey:@"useGPS"];
    BOOL myuseGPS = [[self primitiveUseGPS] boolValue];
    [self didAccessValueForKey:@"useGPS"];
    return myuseGPS;
}

- (void)setUseGPS:(BOOL)newValue
{
    [self willChangeValueForKey:@"useGPS"];
    [self setPrimitiveUseGPS:[NSNumber numberWithBool:newValue]];
    [self didChangeValueForKey:@"useGPS"];
}

참조 URL : https://stackoverflow.com/questions/2937945/iphone-save-boolean-into-core-data

반응형