NSDictionaryResultType表达没有考虑到新插入的对象(NSDictionaryRe

2019-09-01 15:52发布

我想在核心数据,所以我已经设置了以下要求的字段中的最大值:

// Create fetch
NSFetchRequest *fetch = [[NSFetchRequest alloc] init];
[fetch setEntity:[NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:context]];
[fetch setResultType:NSDictionaryResultType];

// Expression for Max ID
NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"myNumbericID"];
NSExpression *minExpression = [NSExpression expressionForFunction:@"max:" arguments:[NSArray arrayWithObject:keyPathExpression]];
NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init];
[expressionDescription setName:@"maxID"];
[expressionDescription setExpression:minExpression]; 
[expressionDescription setExpressionResultType:NSDoubleAttributeType];
[fetch setPropertiesToFetch:[NSArray arrayWithObject:expressionDescription]];

// Execute the fetch. 
double theID = 0;
NSError *error;
NSArray *objects = [context executeFetchRequest:fetch error:&error]; 
if (objects && [objects count] > 0) { 
    theID = [((NSNumber *)[[objects objectAtIndex:0] valueForKey:@"maxID"]) doubleValue];
}

但是它会出现,有没有考虑到已经插入到前手的情况下任何新对象。 这是它是如何工作的? 是否只在商店对象的工作?

我无法找到的文档给它的任何引用。

谢谢,

麦克风

Answer 1:

I've had a response from the Apple Developer Forums and it was confirmed that it doesn't take into account unsaved changes.



Answer 2:

此行为记录(糟糕)[NSFetchRequest setIncludePendingChanges:]。 YES的值不与NSDictionaryResultType支持。 这意味着你不能在未保存的更改使用NSExpressionDescription。



Answer 3:

仅供参考,您可以跳过整个NSExpression部分,只是继续用取,然后用收集运营商为最大值。

theID = [objects valueForKeyPath:"@max.myNumbericID"];


文章来源: NSDictionaryResultType expression not taking into account newly inserted objects