現在、dbからすべてのデータをプルする際に問題が発生しています。つまり、1つのパラメーターがTRUEです。
私はNSPredicate
を使用しており、以下はサンプルコードです
_NSManagedObjectContext *context = managedObjectContext_;
if (!context) {
// Handle the error.
NSLog(@"ERROR CONTEXT IS NIL");
}
NSEntityDescription *entity = [NSEntityDescription entityForName:@"tblcontent" inManagedObjectContext:managedObjectContext_];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"bookmarked == YES"];
[request setPredicate:predicate];
_
Predicatewithformatをほとんどすべてに設定しようとしましたが、YES
値を持つブックマークがまだ引き出されません。
私も_(@"bookmarked == %d",YES)
_を試しましたが、運がよかったです。配列全体を取得し、if(object.bookmarked == YES)
..... blablaを実行して手動でフィルタリングする必要はありません。
本当に助かります。
どうもありがとう。
Apple Document Here )に基づいて、次の2つの方法を使用してブール値を比較できます。
NSPredicate *newPredicate = [NSPredicate predicateWithFormat:@"anAttribute == %@",[NSNumber numberWithBool:aBool]];
NSPredicate *testForTrue = [NSPredicate predicateWithFormat:@"anAttribute == YES"];
ただし、上記の述語は、anAttribute
が空の述語を取得できません。空の属性を処理するには、Apple document here )に従って次のメソッドが必要です。
predicate = [NSPredicate predicateWithFormat:@"firstName = nil"]; // it's in the document
または
predicate = [NSPredicate predicateWithFormat:@"firstName == nil"]; // == and = are interchangeable here
なんらかの理由で、フローのソリューションは私にはうまくいきません:
NSPredicate *testForTrue = [NSPredicate predicateWithFormat:@"anAttribute == YES"];
ただし、これは次のとおりです。
NSPredicate *testForTrue = [NSPredicate predicateWithFormat:@"anAttribute == 1"];
私はパーティーに遅れました、そして0と1を使用して議論したように行く方法ですが、@ YESや@NOのようなNSNumber BOOLリテラルを使用してこれを示すより良い方法があります。それを1または0に変換しますが、視覚的にわかりやすくなっています。
NSPredicate *testForTrue = [NSPredicate predicateWithFormat:@"anAttribute == %@", @NO];
Swift 3/4の答えで忍び寄る:
let predicate = NSPredicate(format: "boolAttribute == %@", NSNumber(value: true))
Appleでは文字通りのブール値は受け入れられないため、明らかにNSNumberを使用する必要があります。
コアデータエンティティデフォルト値はありませんエンティティの属性を作成する場合、述語を機能させるには、ブール属性のデフォルト値を設定するか、この方法で述語を使用する必要があります。
Entityのブールプロパティに対してデフォルト値を提供(NOまたはYES)の場合、このような述語を使用します。
[NSPredicate predicateWithFormat:@"boolAttribute == %@", @NO];
[NSPredicate predicateWithFormat:@"boolAttribute == NO", @NO];
[NSPredicate predicateWithFormat:@"boolAttribute == %0"];
しないにデフォルト値があるか、一部のエンティティがデフォルト値なしですでに作成されている場合、false値でフィルタリングするには、次の文を使用します。
[NSPredicate predicateWithFormat:@"boolAttribute == %@ || boolAttribute == nil", @NO];
どのような結果が得られるかについては言及していません。コードリストにない2つのことは、リクエストのエンティティを設定する場所と、フェッチリクエストの実行を実際にコンテキストに要求する場所です。そこから始めます。
私にとって、保存時にObjectの値の割り当てが間違っていることが起こりました。
このように保存する必要があります
YourNSMNanagedObject.visibleBoolean = [[NSNumber alloc] initWithBool:false]
その後、フェッチ時にすべての述語が機能します。
例えば。
// Filter only unvisible item
NSPredicate *favouriteFilter = [NSPredicate predicateWithFormat:@"visibleBoolean==NO"];
私はこれに少しずつ気をつけており、コアデータのブール値がNSNumbersとして保存されることは必ずしも明確ではありません。
ほとんどの場合、エンティティを作成するときはブールプロパティに@NOを設定しますが、@を設定するのを忘れたときにテストが不合格になる理由を理解するために、かなりの時間を費やす場合が常にあります。エンティティの作成ではNO。
これは明確なコードに最適な選択ではないかもしれませんが、コアデータのブール値には常に(isCompleted!= YES)ではなく(isCompleted!= YES)のように!=述語を常に使用するようになりました。事実nil == falseパターンは他のすべての場所でtrueですが、コアデータの述語とプロパティではそうではなく、非常に混乱する可能性があります。
迅速:
fetchRequest.predicate = NSPredicate(format: "%K == NO",#keyPath(MyEntity.isOccupied))
または
fetchRequest.predicate = NSPredicate(format: "%K == NO",\MyEntity.isOccupied)