コアデータ属性の1つをブール値として設定しました。今、それを設定する必要がありますが、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
さまざまな代替アプローチについて説明します ここ ですが、 クリスハンソン の応答は、特に私にとって最も印象的でした。
必要な数値属性(ブール属性を含む)がある場合は、代わりにそれをスカラーとして入力するだけで、Core Dataは正しいことを行います。
@property(nonatomic)BOOL isDone;
属性がオプションである場合でも、それは機能します-「存在しない」と「false」を混同するだけです。
そして、より整合したCocoa実装の場合:
あなたがしたいもう一つのことは、プロパティに「完了」という名前を付け、ゲッターを「isDone」として指定することです。これが通常のCocoaの命名規則です。
@property(nonatomic、getter = isDone)BOOL done;
次に、「if(item.done){...}」または「item.done = NO;」と書くことができます。コンパイラーは引き続き、プロパティへのアクセス用に-isDoneを生成します。
クリスに感謝し、これが誰かを助けることを願っています。
@RickiGの答えを補完するために、Swift(少なくともv4.2以降))でNSNumber
からBool
を作成する方法とその逆の方法は次のとおりです。
let nsNumberFromBool = NSNumber(booleanLiteral: true) // or false
let boolFromNSNumber = nsNumberFromBool.boolValue
これの「修正」(私見、AppleのSDKのバグ)は、CoreDataで生成されたクラスに次のコードを追加することです。 NB:これを別のファイルのカテゴリで行う場合、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"];
}