所以在这里我从核心数据中获取所有对象并存储在NSArray中:
// Set up fetch request
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"BagItem"];
// Get fetched objects and store in NSArray
NSArray *fetchedObjects = [[self managedObjectContext] executeFetchRequest:fetchRequest error:&error];
每个对象都有title属性,size属性和color属性。我有一个UIPickerView,从这里我可以选择特定项目的大小和颜色,然后点击应用以使用核心数据存储它们。
我想防止重复的行。例如:
Leather Coat, Blue, X-Large (Quantity 5)
Leather Coat, Blue, X-Large (Quantity 1)
我想避免这种情况,而是检测到具有特定标题,大小和颜色的对象已经存在。如果是的话,我想更新现有行的数量标签。
到目前为止,我已经完成了一半。我有一个详细信息视图控制器,可以在切换到显示对象的tableView之前检测到这一点并完成魔术。然而,在tableView上,我允许客户编辑颜色和大小。这使客户有机会将对象/项目的属性更新为他们希望的任何颜色和大小,即使存在具有相同颜色和大小的现有相同项目。
我试图阻止这一点。我想做的是:
搜索数组中包含我想要修改的当前项目的标题,大小和颜色的项目。
更新匹配项目的数量标签。
然后删除不再需要的项目行。*
我只是觉得最好解释一下我的目的。
所以我需要知道的是如何在我的NSArray中搜索其NSString属性与另一组NSStrings匹配的项目。
感谢您的时间。
答案 0 :(得分:1)
您可以使用NSPredicate:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"title == %@ AND size == %@ AND colour == %@", bagItem.title, bagItem.size, bagItem.color];
NSArray *filtered = [arrayOfItems filteredArrayUsingPredicate:predicate];
您可以通过KVC获得总和,例如:
NSNumber *total = [filtered valueForKeyPath:@"@sum.quantity"];
然后,您可以创建一个新的BagItem实例,其标题颜色和大小以及新的数量值具有相同的值。 您可以根据自己的设置更新模型并重新加载表格。