0

下面有 2 个函数,但只有一个有结果。在“noResult”中,我试图获取不同属性值的列表,但我得到的只是 {}。

-(void)noResult {
  NSManagedObjectContext *moc= [xmppMessageArchivingStorage mainThreadManagedObjectContext];
  NSEntityDescription *entity= [NSEntityDescription entityForName:@"XMPPMessageArchiving_Message_CoreDataObject" inManagedObjectContext:moc];
  NSFetchRequest *request= [[NSFetchRequest alloc] init];
  [request setEntity:entity];
  [request setResultType:NSDictionaryResultType];
  [request setReturnsDistinctResults:YES];
  [request setPropertiesToFetch:[NSArray arrayWithObject:@"contact"]];

  NSArray *messages= [moc executeFetchRequest:request error:nil];
  NSLog(@"%@", messages); 
}

-(void)gotResult {
   NSManagedObjectContext *moc= [xmppMessageArchivingStorage mainThreadManagedObjectContext];
   NSEntityDescription *entity= [NSEntityDescription entityForName:@"XMPPMessageArchiving_Message_CoreDataObject" inManagedObjectContext:moc];
   NSFetchRequest *request= [[NSFetchRequest alloc] init];
   [request setEntity:entity];
   NSArray *messages= [moc executeFetchRequest:request error:nil];
}

以下来自“gotResult”“(实体:XMPPMessageArchiving_Message_CoreDataObject;id:0x1c5d7fc0;数据:{\n bareJid = nil;\n bareJidStr = nil;\n body = \"豆袋\";\n compose = 0;\n联系人 = 1000743469142;\n 来自 = 7375011;\n 消息 = nil;\n messageStr = nil;\n 传出 = 0;\n streamBareJidStr = nil;\n 线程 = nil;\n 时间戳 = \"2013-06- 05 10:56:38 +0000\";\n})"

4

1 回答 1

2

我能想到的不同行为的唯一原因是您在调用 fetch 请求之前没有保存NSDictionaryResultType托管对象上下文。

[request setResultType:NSDictionaryResultType];

暗示

[request setIncludesPendingChanges:NO];

这意味着从 fetch 返回的数组反映了持久存储中的当前状态,并且不考虑上下文中的任何未决更改、插入或删除。

于 2013-06-10T08:29:53.743 回答