2016-05-10 10 views
1

を要求することができません。NSPredicateは、私は次の操作を実行しようと

基本的に私は、アプリケーションのユーザーが所有するチャットセッションをすべて取得しようとしています。すべてのセッションに少なくとも1つのメッセージがあることを確認しようとします。 また、すべてのセッションを最新のメッセージで並べ替える必要があります。ここで

はクラッシュです:

enter image description here

+0

私は真 = fetchRequest.includesSubentitiesを追加しようとしましたが、それはまだ私はキーワードでも「ANY」AND ANYメッセージ[SIZE]> 0" – Mikael

+0

失敗した - 私はそれがかもしれない疑いを述語なしでテストし、次にソート記述子を使わずにテストし、問題の原因を調べる(または両方とも!) – Mikael

+0

あなたは述語が問題であることを確認していますしようとした – pbasdf

答えて

1

私はあなたが望むものを達成するためのフェッチ結果コントローラを取得することができますとは思いません。述語は動作させることができます。

predicate = NSPredicate(format: "user.userID = %@ AND [email protected] > 0", IOSUser.sharedInstance().userID) 

をしかし、ソートディスクリプタが失われた原因である:CoreDataができる唯一のソートに(永続的な)属性。 1つの解決策は、永続的な属性(例えば、lastMessageDate)をSessionエンティティに追加することです。セッションとの間でメッセージを追加/削除するときは、必ずこの属性を更新する必要があります。

あなたがフェッチプレーンと一緒に暮らすことができる場合、あなたは述語とMessageオブジェクトの取得ができます

predicate = NSPredicate(format: "session.user.userID = %@", IOSUser.sharedInstance().userID) 

とソートディスクリプタ:

let dateSortDescriptor = NSSortDescriptor(key: "date", ascending: false) 

をしてから使用して個別のSessionオブジェクトの配列を抽出

let sessionsArray = fetchResults.valueForKeyPath("@distinctUnionOfObjects.session") 

fetchResultsとしてNSArray)。

+0

個別のアプローチでメッセージにフェッチを試してみましょうプロパティをフェッチすることも考えていましたが、最後のメッセージをセッションで取得することは可能ですか? – Mikael

+0

アイデアはありますかなぜ "ANDメッセージ[SIZE]> 0"もフェッチをクラッシュさせますか? – Mikael

+0

"AND messages。@ count!= 0"は動作しているようですが...ドキュメントが正しくありませんか? – Mikael

関連する問題