如何从 iOS 的另一个 nsarray 中不存在的核心数据中删除对象?
Posted
技术标签:
【中文标题】如何从 iOS 的另一个 nsarray 中不存在的核心数据中删除对象?【英文标题】:How to remove an object from core data which is not present in another nsarray in iOS? 【发布时间】:2016-07-07 13:36:45 【问题描述】:我有一个应用程序,我需要从我的核心数据对象中删除不存在于字典数组中的元素。
-(void)removeoldvalueswhichisnotpresentinnewone:(NSArray *)array
for(int j=0;j < [array count]; j++)
NSString *pred = [NSString stringWithFormat:@"no !=\"%@\"",[array objectAtIndex:j]];
NSArray *allRes = [self getObjectsOfType:@"Cr" withPredicate:pred];
NSLog(@"%@",allRes);
if ([allRes count] > 0)
@try
for(int i=0;i < [allRes count]; i++)
[[self managedObjectContext] deleteObject:(Cr *)[allRes objectAtIndex:i]];
[self save];
@catch (NSException *exception)
// NSLog(@"Del Warning: Caught %@: %@", [exception name], [exception reason]);
但它不能正常工作。谁能指出我哪里出错了?
【问题讨论】:
【参考方案1】:一些想法:
-
不要使用 NSString 的
stringWithFormat
构建谓词,使用 NSPredicate 的 predicateWithFormat
。
no
是一个数字吗?如果是这样,您不应该在 %@ 周围加上引号。
“NO”是保留字;尝试使用不同的属性名称。
你的逻辑正确吗?它将删除与数组中第一个对象不匹配的所有项目(因此仅保留匹配第一个对象的项目),然后循环并删除与第二个对象不匹配的所有项目等(这可能会删除剩下的那些通过第一次通过循环)。如果对象与数组中的所有对象不匹配,则应仅删除它们。您可以改为使用 NOT IN 谓词:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT (attribute IN %@)", array];
这样你就不需要外循环了。
【讨论】:
以上是关于如何从 iOS 的另一个 nsarray 中不存在的核心数据中删除对象?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 NSArray 或 NSDitory 从 iOS 发送到 PHP webservice
iOS 如何使用早期版本的 iOS 中不存在的情节提要元素?