如何使用Core Data过滤数据

时间:2013-08-11 13:02:19

标签: ios core-data

我有一个应用程序从Web服务获取数据并将其解析为Core Data。

TabBarDesign

该应用基于标签栏,第一个标签IntroViewController用于设置首选项。用户可以通过以下两种方式过滤商店:

通过点击设置DriveThru的{​​{1}}单元格来激活

云端硬盘

点击设置self.driveThru = TRUE的{​​{1}}即可激活

立即打开

IntroViewController

位置的所有数据都存储在数据库中。 Open Now Cell底部是一个搜索按钮,可以转到self.open = TRUE标签。这样:

  1. 从Core Data fetch
  2. 填充IntroViewController数组
  3. 创建tableviewcontroller个对象,其中self.stores属性设置为打开或关闭字符串
  4. MyLocation数组进行排序并将estado数组重新设置为已排序数组
  5. 最后,它使用排序版本填充MyLocation
  6. 如果用户在introviewcontroller中选中了drivethru选项,那么它应该只显示带有drivethru的tableview选项卡。这很好用。

    现在,如果他检查了introviewcontroller中的Open Now选项,那么它应该只显示打开的商店。

    这是我从db获取的当前tableviewcontroller方法:

    self.annotationsToSort

    self.stores array with locations

    这将返回所有商店。因此,当我通过tableview数组循环时,我在- (void)loadRecordsFromCoreData { [self.managedObjectContext performBlockAndWait:^{ [self.managedObjectContext reset]; NSError *error = nil; NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:self.entityName]; [request setSortDescriptors:[NSArray arrayWithObject: [NSSortDescriptor sortDescriptorWithKey:@"nombrePublico" ascending:YES]]]; //Add Predicate NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(driveThru == %@)", [NSNumber numberWithBool:self.driveThru]]; [request setPredicate:predicate]; self.stores = [self.managedObjectContext executeFetchRequest:request error:&error]; }]; [self populateLocationsToSort]; } 方法中执行了此操作:

    populateLocationsToSort

    所以现在我的self.stores数组包含数据库中的Location对象。现在,这些对象包含基于当前时间打开或关闭的for (Location * locationObject in self.stores) { // 3. Unload objects values into locals NSString * storeDescription = locationObject.nombrePublico; NSString * address = locationObject.direccion; NSString * hor_LV = locationObject.hor_LV; NSString * hrs24 = locationObject.hrs24; NSString * driveThru = locationObject.driveThru; ... NSString * estado; // Set it based on TimeComparator if ([TimeComparator dealWithTimeStrings2:locationObject.hor_LV]) { estado = @"Open"; } else { estado = @"Closed"; } // 4. Create MyLocation object based on locals gotten from Custom Object CLLocationCoordinate2D coordinate; coordinate.latitude = latitude.doubleValue; coordinate.longitude = longitude.doubleValue; MyLocation *annotation = [[MyLocation alloc] initWithName:storeDescription address:address coordinate:coordinate distance:0 hrs24:hrs24 driveThru:driveThru hor_LV:hor_LV estado:estado]; // 5. Calculate distance between locations & uL CLLocation *pinLocation = [[CLLocation alloc] initWithLatitude:annotation.coordinate.latitude longitude:annotation.coordinate.longitude]; CLLocationDistance calculatedDistance = [pinLocation distanceFromLocation:self.userLocation]; annotation.distance = calculatedDistance/1000; //Add annotation to local NSMArray [self.annotationsToSort addObject:annotation]; } [self sort]; ... 字段。

    但现在我需要在self.annotationsToSort中仅展示Open商店。我应该如何操纵数据才能做到这一点?我想出的唯一一件事就是:

    1. 在排序前循环estado
    2. 创建一个没有tableviewcontroller
    3. 对象的新数组
    4. 然后排序
    5. 有什么建议吗?

0 个答案:

没有答案