我想根据存储的属性(NSDate)月执行谓词。 我知道比较开始和结束日期(手动设置)允许这样做。
但我觉得Managed Object的类中的自定义方法应该也可以轻松实现这一点吗?好吧,我试过了,但我似乎无法通过让谓词触发它来访问一个简单的方法。这有可能吗?
托管对象文件:
.h文件:
@property (nonatomic,retain) NSNumber *monthOfDate;
-(NSNumber *)monthOfDate;
.m文件:
@synthesize monthOfDate;
-(NSNumber *) monthOfDate
{
NSDate *date = [self start];
NSDateComponents *components = [[NSCalendar currentCalendar]components: NSCalendarUnitMonth fromDate:date];
NSNumber *month = [NSNumber numberWithInteger:[components month]];
return month;
}
这是我的谓词:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"client == %@ AND monthOfDate == %d", clientMO,int 6];
它返回一个错误:在实体中找不到keypath monthOfDate。我推测,因为它不是一个真正的属性?我怎样才能让它被发现?
更新
上面的.h和.m文件来自自动生成的Event类(NSmanaged对象)。我可能稍后将自定义代码移动到某个类别,但到目前为止还没有必要进行数据库模型修订。
下面是带有上述谓词的FetchedResultsController(在uiviewcontroller类中)设置:
NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"Event" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSSortDescriptor *sortfix = [[NSSortDescriptor alloc]initWithKey:@"timeStamp" ascending:NO];
[fetchRequest setSortDescriptors:[NSArray arrayWithObjects:sortfix,nil]];
[fetchRequest setFetchBatchSize:20];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"client == %@ AND monthOfDate == %d", clientMO,int 6];
[fetchRequest setPredicate:predicate];
NSFetchedResultsController *theFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:managedObjectContext sectionNameKeyPath:sectionKeyPathProperty
cacheName:nil];
//sectionKeyPathProperty is a variable that let's me choose one of multiple transient properties I have created for creating relevant sections.
self.fetchedResultsControllerClient = theFetchedResultsController;
_fetchedResultsControllerClient.delegate = self;
return _fetchedResultsControllerClient;
答案 0 :(得分:1)
只有当MO已经加载到内存中时才会出现这种情况。 (取出)
在我使用FRC的情况下,情况并非如此,因此我将不得不创建一个单独的月份属性,该属性将保存在MO创建中。
感谢用户Run Loop回答4年前的问题!