在“FilterProperty”实体中插入时,我在类别“FilterProperty + Manage.h”中使用以下代码
+(FilterProperty *)insertFilterPropertyWithName:(NSString *)filterPropertyName forManagedObjectContext:(NSManagedObjectContext *)managedObjectContext forFriendlyName:(NSString *)friendlyName
forDefaultValue:(NSNumber *)defaultValue forMinValue:(NSNumber *)minValue forMaxValue:(NSNumber *)maxValue forType:(NSNumber *)type forBelongsToFilter:(Filter *)filter
{
FilterProperty *fp = nil;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"FilterProperty" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@ AND belongsToFilter.name = %@", filterPropertyName, filter.name];
[fetchRequest setPredicate:predicate];
NSError *error = nil;
NSArray *fetchedObjects = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
if (fetchedObjects == nil)
{
return nil;
}
if (fetchedObjects != nil && fetchedObjects.count > 0)
{
fp = fetchedObjects.firstObject;
}
else if(fetchedObjects != nil && fetchedObjects.count == 0)
{
fp = [NSEntityDescription insertNewObjectForEntityForName:@"FilterProperty" inManagedObjectContext:managedObjectContext];
fp.name = filterPropertyName;
fp.friendlyName = friendlyName;
fp.defaultValue = defaultValue;
fp.minValue = minValue;
fp.maxValue = maxValue;
fp.belongsToFilter = filter;
fp.type = type;
}
return fp;
}
搜索时没有,我会执行以下操作:
+(NSArray *)getAllFilterPropertiesForFilter:(Filter *)filter forManagedObjectContext (NSManagedObjectContext *)managedObjectContext
{
NSArray *set = nil;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"FilterProperty" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"belongsToFilter.name = %@", filter.name];
[fetchRequest setPredicate:predicate];
NSError *error = nil;
NSArray *fetchedObjects = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
if (fetchedObjects == nil) {
return nil;
}
if(fetchedObjects != nil)
{
set = fetchedObjects;
}
return set;
}
调用任何给定过滤器时的上述函数返回一个零对象的数组。我无法理解为什么。任何帮助,将不胜感激!感谢。
答案 0 :(得分:0)
您可以尝试使用此代码进行搜索: -
+(NSArray *)getAllFilterPropertiesForFilter:(Filter *)filter forManagedObjectContext (NSManagedObjectContext *)managedObjectContext
{
NSArray *set = nil;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"FilterProperty" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"belongsToFilter.name == %@", filter.name];
[fetchRequest setPredicate:predicate];
NSError *error = nil;
NSArray *fetchedObjects = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
if (fetchedObjects == nil) {
return nil;
}
if(fetchedObjects != nil)
{
set = fetchedObjects;
}
return set;
}
答案 1 :(得分:0)
我认为在您的insertFilterPropertyWithName方法中,您没有保存新数据。如果我是正确的,请在if-else块之后尝试此代码:
NSError *error;
if (![managedObjectContext save:&error])
{
//could not save
}
希望这可以解决您的问题。
答案 2 :(得分:0)
在下面的情况下,如果条件需要保存在managedobjectcontext中。
else if(fetchedObjects != nil && fetchedObjects.count == 0)
{
fp = [NSEntityDescription insertNewObjectForEntityForName:@"FilterProperty" inManagedObjectContext:managedObjectContext];
fp.name = filterPropertyName;
fp.friendlyName = friendlyName;
fp.defaultValue = defaultValue;
fp.minValue = minValue;
fp.maxValue = maxValue;
fp.belongsToFilter = filter;
fp.type = type;
NSError *err = nil;
[managedObjectContext save:&err];
if (errorInWrite != nil) {
//Problem while saving
}
}
使用like代替“=”希望它会有用。
+(NSArray *)getAllFilterPropertiesForFilter:(Filter *)filter forManagedObjectContext (NSManagedObjectContext *)managedObjectContext
{
NSArray *set = nil;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"FilterProperty" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"belongsToFilter.name like %@", filter.name];
[fetchRequest setPredicate:predicate];
NSError *error = nil;
NSArray *fetchedObjects = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
if (fetchedObjects == nil) {
return nil;
}
if(fetchedObjects != nil)
{
set = fetchedObjects;
}
return set;
}