这是一个根据当前时间过滤具有开始时间和结束时间的数组的示例。这工作正常:

问题:但在这里我想知道collectionArr的索引位置,谓词从中选择值。

NSDate* currentDate = [NSDate date];
NSDateFormatter *_formatter = [[[NSDateFormatter alloc] init] autorelease];
[_formatter setLocale:[NSLocale currentLocale]];
[_formatter setDateFormat:@"yyyy-MM-dd hh:mm a"];

NSString *_date=[_formatter stringFromDate:currentDate];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"StartDate <= %@ AND EndDate = %@", _date, _date];
if (shortPrograms.count > 0) {
    [shortPrograms removeAllObjects];
}

//collectionArr have multiple dictionaries ,which has start date and end date.
//collectionArr = [[NSArray alloc] initWithObjects:[NSDictionary dictionaryWithObjectsAndKeys:@"..Sdate..",@"Startdate",@"..Edate..",@"Enddate", nil], nil];
//shortPrograms is a filter are, having the date in between start date and end date.

[shortPrograms addObjectsFromArray:[collectionArr filteredArrayUsingPredicate:predicate]];

最佳答案

您的shortPrograms数组包含collectionArr中对象的子集。听起来您想从shortPrograms获取对象并确定它来自collectionArr的位置。

一般来说,您不能。但是,如果collectionArr中的所有对象都是唯一的,则有可能。

id someObject = shortPrograms[someIndex]; // get some value
NSUInteger originalIndex = [collectionArr indexOfObject:someObject];

如果collectionArr中的对象不是唯一的,则此方法将无效,因为无法知道您要处理的是哪个重复项。

10-07 17:22