私は述語にかなり新しいことを認めなければなりません。私はユーザーが記入し、この情報に基づいて、保存されたデータを検索し、関連する結果を返すという形式を持っています。これのコードは次のとおりです。NSCompoundPredicateが予期しない結果を示しています
let numberOfPlayers = numberOfPlayersPicked
let minTimeForPredicate = minTime
let maxTimeForPredicate = maxTime
let gameTime = "averageplaytime"
let minPlayers = "minplayers"
let maxPlayers = "maxplayers"
let minPlayersPredicate = NSPredicate(format: "%K <= %D", minPlayers, numberOfPlayers)
let maxPlayersPredicate = NSPredicate(format: "%K >= %D", maxPlayers, numberOfPlayers)
let minTimePredicate = NSPredicate(format: "%K >= %D", gameTime, minTimeForPredicate)
let maxTimePredicate = NSPredicate(format: "%K <= %D", gameTime, maxTimeForPredicate)
let andPredicate = NSCompoundPredicate.init(andPredicateWithSubpredicates: [minPlayersPredicate, maxPlayersPredicate, minTimePredicate, maxTimePredicate])
numberOfPlayersPicked、minTimeおよびmaxTimeは前の画面からのものです。私が誤った情報を返すと感じる例は、numberOfPlayersPicked = 1、minTime = 120、maxTime = 999(時間はセグメント化されたコントロールによって設定されます)です。取得されたデータには、minplayers = 1、maxplayers = 2、averageplaytime = 60があります。なぜこれを取得しているのか分かりませんが、明らかに何かを誤解しています。
編集:何か起こりそうなものが見つかるかどうかを確認するために、結果の負荷を表示しようとしました。
print(andPredicate)
print(numberOfPlayers)
print(minTimeForPredicate)
print(maxTimeForPredicate)
print(games[0])
minplayers <= 1 AND maxplayers >= 1 AND averageplaytime >= 0 AND averageplaytime <= 30
1
0
30
<NSManagedObject: 0x6100000a5640> (entity: GameInCollection; id: 0xd0000000003c0000 <x-coredata://31C3474F-7C40-4C47-AF2D-883A76F922C6/GameInCollection/p15> ; data: {
averageplaytime = 150;
barcode = "";
gametitle = "1 5 150";
maxplayers = 5;
minplayers = 1;
})
はいこれでした。コアデータの保存を変更して、代わりに整数を格納するようになりました。 – LukeNobleUK