我必须使用'帐户'和'事件'等实体。
该帐户与事件有很多关系,与事件有反向关系。
现在,当我将一个事件对象保存到帐户时,它运行良好。
但是,当我获取特定相关帐户的事件时,它会为所有可用的实体提供不理想的行为。
我正在传递currentAccount对象,如下所示:
if (PrivarteController == nil) {
PrivarteController *aController = [[PrivarteController alloc]initWithNibName:@"PrivarteController"
bundle:nil];
self.PrivarteController = aController;
[aController release];
}
self.PrivarteController.shouldFetchNewCounts = YES;
self.PrivarteController.currentAccount = [self.fetchedResultsController objectAtIndexPath:indexPath];
[[self navigationController] pushViewController:self.PrivarteController animated:YES];
在该控制器中,我将相关事件提取到这样的帐户:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSString *predicateFormat = [NSString stringWithFormat:@"ddtype = 'Home'"];
NSPredicate *pred = [NSPredicate predicateWithFormat:predicateFormat];
[request setPredicate:pred];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"DDEvent" inManagedObjectContext:[self.currentAccount managedObjectContext]];
[request setEntity:entity];
[request setResultType:NSManagedObjectResultType];
NSError *error = nil;
NSArray *array = [[self.currentAccount managedObjectContext] executeFetchRequest:request error:&error];
在这个请求中假设我在帐户A中有两个Home的事件,在帐户B中有两个Home的事件,所以不是为每个帐户提供2个对象,而是为我提供了两个帐户的所有4个对象,所以这有什么问题。查询。
我不知道出了什么问题?
谢谢,
答案 0 :(得分:1)
您的谓词必须按帐户过滤 - 它们共享托管对象上下文。
答案 1 :(得分:1)
我不确定我是否正确阅读此内容,因为您谈论的是account
和event
个实体,但这些名称未出现在代码中。
尽管如此,我觉得fetch工作正常。您告诉它要抓取DDEvent
属性等于ddevent
的所有'home'
个对象。你说你有四个这样的对象,你得到四个回来。
我认为您的问题是您的获取中存在错误的实体。如果要基于帐户进行搜索,则需要将获取的实体设置为Account
实体。然后你告诉谓词走这些关系。使用类似"events.ddevent=='home'"
的谓词。这将返回具有该条件的Account实体列表。
更新
fetch返回仅包含一种对象的数组。您将返回 一系列Account
个对象 或 一个{{1}的数组对象。你需要清楚你需要哪个对象。
当你说:
在这个请求中假设我有两个 账户A和2中的主页事件 因此,账户B中的家庭事件 给我两个对象 帐户它给了我所有4个对象 因为这两个帐户都有错 查询
您好像希望找回DDEvent
和Account
个对象。现在,您只获取DDEvent
个对象。
一旦你清楚自己想要哪个对象,就需要明确你想要的特定对象应该具有哪些属性。现在,现在,您只获取属性'ddevent =='Home'的DDEvent
个对象,而没有任何其他属性或关系的记录。如果您希望它们与特定帐户建立关系,则需要将其添加到谓词中。
通常,如果你想在一个关系的另一端有一个特定的对象,你可以获取主要对象然后走它的关系。在这种情况下,如果您希望与DDEvent
对象A相关的DDEvent
个对象与条件匹配。您将获取Account
对象A,然后您将使用谓词来过滤Account
集以查找所需的特定directdebits
对象。