0

私はコアデータを扱っていて、最後の20レコードを取得しようとしていますsetFecthLimitが、これらの最後のレコードでは、未読の数を取得したいので、これを使用します

NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Post" inManagedObjectContext:_managedObjectContext];
[request setEntity:entity];
[request setFetchLimit:20];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"isRead = NO OR isRead = NIL"];
[request setPredicate:predicate];                    

NSError *error = nil;
NSMutableArray *records = [[_managedObjectContext
                                            executeFetchRequest:request
                                            error:&error] mutableCopy];

しかし、常に20が返されます。誰か助けてください。

4

2 に答える 2

0

述語の形式にタイプミスがあると思います:

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Post"]
request.fetchLimit = 20;
request.predicate = [NSPredicate predicateWithFormat:@"(isRead == NO) OR (isRead == NULL)"];
NSSortDescriptor = [...insert your sort descriptor code here...]
request.sortDEscriptos = @[sd];

また、ランダムな 20 ではなく、最後の 20 を取得するように並べ替えることを忘れないでください。

于 2013-01-29T20:08:45.053 に答える
0

簡単な解決策は、述語を削除することです。20 個のオブジェクトを取得し、述語に基づいてそれらをフィルター処理します。

例えば:

NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Post" inManagedObjectContext:_managedObjectContext];
[request setEntity:entity];
[request setFetchLimit:20];                    

NSError *error = nil;
NSArray *records = [_managedObjectContext executeFetchRequest:request
                                                        error:&error];

// do some error checking here...
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"isRead = NO OR isRead = nil"];
// [NSPredicate predicateWithFormat:@"isRead = %@", [NSNumber numberWithBool:NO]];
NSArray *filteredRecords = [records filteredArrayUsingPredicate:predicate];
于 2013-01-28T23:09:56.840 に答える