gpt4 book ai didi

objective-c - NSFetchedResultsController 使用子属性排序

转载 作者:行者123 更新时间:2023-12-04 14:48:59 24 4
gpt4 key购买 nike

我有一对多的父子实体书<->>借

  • 姓名
  • 借(关系)

借用

  • 借用日期
  • 注意
  • 书(关系)

我想使用子实体的最大 NSDateNSFetchedResultsController 中的 Book 实体进行排序,以显示最近借过的书。

我该怎么做?我尝试使用我自己的方法,例如使用 Book 上的类别

- (NSArray *)borrowSortedByborrowedDate
{
NSSortDescriptor *sortByCreatedDate = [NSSortDescriptor sortDescriptorWithKey:@"borrowDate" ascending:NO];
NSArray *sortedArray = [self.histories sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortByCreatedDate]];
return sortedArray;
}

- (NSDate *)recentBorrowDate
{
Borrow *borrow = [[self borrowSortedByborrowedDate] objectAtIndex:0];
return borrow.borrowDate;
}

并将其放入sortDescriptor

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"recentBorrowDate" ascending:YES];

但是没用。

这是我获取的请求(无效)

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Book" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];

[fetchRequest setFetchBatchSize:20];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"recentBorrowDate" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil];

[fetchRequest setSortDescriptors:sortDescriptors];

我的预期结果是

  • 书名1(借阅日期为今天)
  • 书名2(昨天借的日期)
  • Book name3 (borrowDate many days ago)

最佳答案

我有同样的问题,这是我目前实现所需输出的解决方法。 (也许这是唯一的方法,但我仍在寻找......)

当创建一个新的借阅时,只需同时更新 book.lastBorrowDate 属性。

// Create new Borrow and set Book
Borrow *newBorrow = (Borrow *)[NSEntityDescription insertNewObjectForEntityForName:@"Borrow" inManagedObjectContext:self.managedObjectContext];
newBorrow.book = theBook;
newBorrow.borrowDate = [NSDate date];
newBorrow.note = theNote;

// Now also update our book's lastBorrowDate tracking property
theBook.lastBorrowDate = [NSDate date];

// Save all our changes
NSError *error = nil;
if (![self.managedObjectContext save:&error]) {
// Something went horribly wrong...
NSLog(@"Unresolved error: %@, %@, %@", error, [error userInfo],[error localizedDescription]);
abort(); // Fail
}

现在,稍后将它们拉出时很容易...

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Book" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];

[fetchRequest setFetchBatchSize:20];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lastBorrowDate" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil];

[fetchRequest setSortDescriptors:sortDescriptors];

关于objective-c - NSFetchedResultsController 使用子属性排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10578057/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com