【发布时间】:2016-12-19 05:47:14
【问题描述】:
我是 iOS 新手,在比较两个数组时遇到了问题。我试过这段代码
if ([arr1 isEqualToArray:arr2])
{
NSLog(@"Print the output to update...");
}
但这对我不起作用。因为我的数组是这样的
arr1=[@"1",@"2",@"3",@"4",@"5",@"6"];
arr2=[@"2"];
所以,我尝试了这样的代码
NSSet *set1 = [NSSet setWithArray:arr1];
NSSet *set2 = [NSSet setWithArray:arr2];
if ([set1 isEqualToSet:set2]) {
// equal
}
但是,这对我不起作用。在我的情况下,arr1 来自 Web 服务,arr2 来自核心数据。您能否提出任何其他建议来比较这两个数组。
在 if 条件下我正在更新我的代码,在 else 条件下我正在插入
if([arr1 isEqualToArray:arr2])
{
NSManagedObjectContext *context = [self managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"EntityName" inManagedObjectContext:context]];
NSError *error = nil;
NSArray *results = [context executeFetchRequest:request error:&error];
NSManagedObject* favoritsGrabbed = [results objectAtIndex:0];
[favoritsGrabbed setValue:@"1" forKey:@"Key"];
// Save the object to persistent store
if (![context save:&error]) {
NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
}
}
else
{
if (self.device) {
// Update existing device
[device setValue:Audit forKey:@"key1"];
[device setValue:MethodID forKey:@"key2"];
[device setValue:CheckPointID forKey:@"key3"];
[device setValue:GlobalStringChk forKey:@"key4"];
[device setValue:RegionID forKey:@"key5"];
[device setValue:BranchID forKey:@"key6"];
[device setValue:SiteID forKey:@"key7"];
[device setValue:AuID forKey:@"key8"];
[device setValue:userid forKey:@"key9"];
[device setValue:StringIndex forKey:@"key10"];
} else {
// Create a new device
NSManagedObject *newDevice = [NSEntityDescription insertNewObjectForEntityForName:@"EntityName" inManagedObjectContext:context];
[newDevice setValue:Audit forKey:@"key1"];
[newDevice setValue:MethodID forKey:@"key2"];
[newDevice setValue:CheckPointID forKey:@"key3"];
[newDevice setValue:GlobalStringChk forKey:@"key4"];
[newDevice setValue:RegionID forKey:@"key5"];
[newDevice setValue:BranchID forKey:@"key6"];
[newDevice setValue:SiteID forKey:@"key7"];
[newDevice setValue:AuID forKey:@"key8"];
[newDevice setValue:userid forKey:@"key9"];
[newDevice setValue:StringIndex forKey:@"key10"];
}
}
听着,我需要比较数组,以便我可以更新核心数据中的值,如果数组不相等,那么我需要插入它们。所以,我不能使用循环。如果我使用循环,请查看它的 else 条件它插入数据直到循环运行,我想在点击时插入一个值。所以,我不能使用循环。
【问题讨论】:
-
你在比较什么,两个数组中没有相等的元素?
-
@vaibhav 不比较计数比较它是否包含相同的值?
-
无论是计数还是相同值,您都可以使用循环来完成。
-
@vaibhav 当我尝试使用循环时它会崩溃,因为两个数组计数不同。
-
您是否想知道一个数组中的元素是否存在于另一个数组中?
标签: objective-c nsarray nsset