我有一个应用程序从Web服务获取数据并将其解析为Core Data。
该应用基于标签栏,第一个标签IntroViewController
用于设置首选项。用户可以通过以下两种方式过滤商店:
DriveThru
的{{1}}单元格来激活云端硬盘。
点击设置self.driveThru = TRUE
的{{1}}即可激活立即打开。
位置的所有数据都存储在数据库中。 Open Now Cell
底部是一个搜索按钮,可以转到self.open = TRUE
标签。这样:
IntroViewController
数组
tableviewcontroller
个对象,其中self.stores
属性设置为打开或关闭字符串MyLocation
数组进行排序并将estado
数组重新设置为已排序数组MyLocation
如果用户在introviewcontroller中选中了drivethru选项,那么它应该只显示带有drivethru的tableview选项卡。这很好用。
现在,如果他检查了introviewcontroller中的Open Now选项,那么它应该只显示打开的商店。
这是我从db获取的当前tableviewcontroller方法:
self.annotationsToSort
这将返回所有商店。因此,当我通过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商店。我应该如何操纵数据才能做到这一点?我想出的唯一一件事就是:
estado
tableviewcontroller
有什么建议吗?