2014-10-27 40 views
0

我有2個模型,一個叫做Books,另一個叫做Users。作爲一種關係,用戶可以只有一本書。我想循環遍歷所有「已批准」(用戶屬性)的用戶,並根據存儲在名爲「評級」的書籍中的屬性對它們進行排序。我寫了這個可以這樣做:正在訪問for循環中的核心數據關係很慢?

- (NSArray *)sortedApprovedUsersByBookRating 
{ 
    NSArray *allUsersWithBooks = [User fetchFromDatabaseWithPredicate:[NSPredicate predicateWithFormat:@"approved == 1"] error:nil]; 

    NSArray *sortedUsers = [allUsersWithBooks sortedArrayUsingComparator:^NSComparisonResult(User a, User b) { 
     return [a.book.rating compare:b.book.rating]; 
    }]; 

    return sortedUsers; 

} 

而且這個工作,因爲我有用戶本書叫核心數據的關係,它抓住了正確的書,排序,所有罰款和回報。但是,我注意到,當我有很多用戶時,這是一個非常緩慢的過程。我的理論是因爲每次訪問a.book或b.book時,都必須從核心數據中獲取它。

我想知道是否有解決這個問題,當給定的用戶誰批准屬性是真實的,我可以返回這些用戶基於他們的書評分排序,我不必查詢用戶的書每次。

回答

1

您可以使用NSSortDescriptor。所以排序會發生在SQLite級別。 NSSortDescriptor有一個名爲sortDescriptorWithKey:ascending:selector:的初始化程序。您可以使用key屬性(它是一個字符串)對書籍進行排序。希望這可以幫助。