NSDictionaryResultType التعبير لا تأخذ بعين الاعتبار الأشياء التي تم إدراجها حديثا

StackOverflow https://stackoverflow.com/questions/1632029

  •  06-07-2019
  •  | 
  •  

سؤال

وأريد الحد الأقصى لقيمة حقل في البيانات الأساسية حتى لقد إعداد الطلب التالي:

// 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];
}

ولكن قد يبدو انها ليست مع الأخذ بعين الاعتبار أي الكائنات الجديدة التي تم إدراجها في سياق قبل اليد. هل هذه هي الطريقة التي من المفترض أن تعمل؟ هل يعمل فقط على الكائنات في المتجر؟

لا أستطيع أن أجد أي إشارة إلى ذلك في مستندات.

شكرا،

ومايك

هل كانت مفيدة؟

المحلول

ولقد كان ردا من شركة آبل في المنتدى المطور وتم التأكيد على أنه لا يأخذ بعين الاعتبار التغييرات غير المحفوظة.

نصائح أخرى

ويتم توثيق هذا السلوك (ضعيف) في [setIncludePendingChanges NSFetchRequest:]. لا يتم اعتماد قيمة YES مع NSDictionaryResultType. وهذا يعني أنه لا يمكنك استخدام NSExpressionDescription على تغييرات غير محفوظة.

ولمعلوماتك، يمكنك تخطي قسم NSExpression كامل وعادل المضي قدما في جلب، ثم استخدم مشغلي جمع لقيمة الحد الأقصى.

theID = [objects valueForKeyPath:"@max.myNumbericID"];
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top