From http://www.ericd.net/2009/05/iphone-nstimer-and-that-thing-called.html

 

Tuesday, May 12, 2009

 iPhone: NSTimer and that thing called userInfo

Tuesday, May 12, 2009   

 
As I am implementing some stuff, I had reason to send along some information to a NSTimer's "onComplete" method. Every example online I've seen recently using NSTimer sets the userInfo property to nil. Not very useful for me to learn from. After a little banter on an email list, I understand how this thing works.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *newCell = [tableView cellForRowAtIndexPath:indexPath];
UILabel *cellLabel = (UILabel *)[newCell.contentView viewWithTag:1];
[newCell setSelected:YES animated:YES];

NSMutableDictionary *myDictionary = [[NSMutableDictionary alloc] init];
[myDictionary setObject:tableView forKey:@"table"];
[myDictionary setObject:indexPath forKey:@"indexPath"];
// The colon after the onTimer allows for the argument
[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(onTimer:) userInfo:myDictionary repeats:NO];
[myDictionary release];
}
So the onTimer method will get called after .5 seconds and it's being sent the userInfo object containing that NSMutableDictionary. Now to use that...
- (void)onTimer:(NSTimer *)timer {
NSLog(@"--- %@", [timer userInfo] );
[[[timer userInfo] objectForKey:@"table"] deselectRowAtIndexPath:[[timer userInfo] objectForKey:@"indexPath"] animated:YES];
// I have a reference to the tableView so I can do this below
// but to show how the keys work, the call above these works
//[table deselectRowAtIndexPath:[[timer userInfo] objectForKey:@"indexPath"] animated:YES];
}
Ta da. Now I see how this works, and userInfo has a type of (id) meaning it can be anything.
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 zer931 的頭像
    zer931

    zer931的部落格

    zer931 發表在 痞客邦 留言(0) 人氣()