Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

brygruver

macrumors member
Original poster
Aug 2, 2007
75
0
So I have an Array (NSMutable) of objects and I am trying to filter them by date. Specifically I only want those objects that are less than 7 days old.

Last night I toiled away and got NSPredicate to do the job. And it did a BEAUTIFUL Job in the simulator. So I hook up my iPod touch and click Build and Go. Error, NSPredicate, bla bla bla. hmmmmm......So I start searching online and apparently NSPredicate is available in the simulator, but does NOT work on the actual Device. It is not included as part of the Foundation. Great.

So now I'm stuck, I don't know how else to do it. The Documentation specifically tells you to use NSPredicate to filter an Array. And that's the only suggestion that it gives you. (In hindsight, it also says that it's not available on the phone. lol)

Here is my code:

Code:
*NSDate nowDate = NSDate date;
// Take the Current date and find the time since 1970
NSTimeInterval now = nowDate timeIntervalSince1970;
// Take the time since 1970 and subtract the number of seconds in a week.
NSTimeInterval weekAgo = (now - 604800);

// Create the Predicate to do the Filtering.
*NSPredicate predicate = [NSPredicate predicateWithFormat:@"startDateTime >= %@", NSDate dateWithTimeIntervalSince1970: weekAgo];

// Load a New array with all of the sessions.
*NSMutableArray filteredArray = [NSMutableArray alloc initWithArray:appDelegate sessions];

// Fiter that new Array.
*filteredArray filterUsingPredicate:predicate; *

Are there any suggestions?

Sorry about the weird formatting, it's my first post.
 

MacDonaldsd

macrumors 65816
Sep 8, 2005
1,005
0
London , UK
you could just enumerate through the first array
So in non real code:

for( object in orignalArray){

if(Check to see if object is less that 7 days old){

add object to filtered array
}

}

So I have an Array (NSMutable) of objects and I am trying to filter them by date. Specifically I only want those objects that are less than 7 days old.

Last night I toiled away and got NSPredicate to do the job. And it did a BEAUTIFUL Job in the simulator. So I hook up my iPod touch and click Build and Go. Error, NSPredicate, bla bla bla. hmmmmm......So I start searching online and apparently NSPredicate is available in the simulator, but does NOT work on the actual Device. It is not included as part of the Foundation. Great.

So now I'm stuck, I don't know how else to do it. The Documentation specifically tells you to use NSPredicate to filter an Array. And that's the only suggestion that it gives you. (In hindsight, it also says that it's not available on the phone. lol)

Here is my code:

Code:
*NSDate nowDate = NSDate date;
// Take the Current date and find the time since 1970
NSTimeInterval now = nowDate timeIntervalSince1970;
// Take the time since 1970 and subtract the number of seconds in a week.
NSTimeInterval weekAgo = (now - 604800);

// Create the Predicate to do the Filtering.
*NSPredicate predicate = [NSPredicate predicateWithFormat:@"startDateTime >= %@", NSDate dateWithTimeIntervalSince1970: weekAgo];

// Load a New array with all of the sessions.
*NSMutableArray filteredArray = [NSMutableArray alloc initWithArray:appDelegate sessions];

// Fiter that new Array.
*filteredArray filterUsingPredicate:predicate; *

Are there any suggestions?

Sorry about the weird formatting, it's my first post.
 

brygruver

macrumors member
Original poster
Aug 2, 2007
75
0
Result

Code:
	NSDate *nowDate = [NSDate date];
	// Take the Current date and find the time since 1970
	NSTimeInterval now = [nowDate timeIntervalSince1970];
	// Take the time since 1970 and subtract the number of seconds in a week.
	NSTimeInterval weekAgo = (now - 604800);
	NSLog (@"Week Ago Date is %1.1f", weekAgo);
	NSMutableArray *filteredArray = [[NSMutableArray alloc] init];
	unsigned int i;
	for (i = 0; i < [appDelegate.sessions count]; i++) {
		id session = [appDelegate.sessions objectAtIndex: i];
		id startDate  = [[appDelegate.sessions objectAtIndex: i] startDateTime];
		NSTimeInterval startTime = [startDate timeIntervalSince1970];
		NSLog (@"Date of %@ is %@ or %1.1f", session, startDate, startTime);
		if (startTime > weekAgo) {
			[filteredArray addObject:session];
		}
	}
	NSLog(@"filteredArray = %@", filteredArray);
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.