0

しばらくしてから、NSMutableDictionary からいくつかのオブジェクトを削除したいと考えています。

私は持っている:

//first Method start
    PedObjectTimer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(fireTimer:) userInfo:PedMessage repeats:YES];
    [PedMessage setObject:PedObjectTimer forKey:@"Timer"];
    [PedObjects setObject:[PedMessage copy] forKey:[PedMessage objectForKey:@"ObjectID"]];
//first Method end



- (void) fireTimer:(NSTimer*)theTimer {

    NSLog(@"%@",PedObjects);
    [PedObjects removeObjectForKey:[[theTimer userInfo]objectForKey:@"ObjectID"]];
    NSLog(@"%@",PedObjects);

    [theTimer invalidate];
    theTimer = nil;
}

問題は、タイマーオブジェクトを辞書にコピーできないことです...

fireTimerメソッドで2秒後に正しいものを削除するにはどうすればよいですか?

これで同じ結果が得られます.2つのセレクターがある場合、辞書の2つのエントリは削除されません...

[PedObjects setObject:[PedMessage copy] forKey:[PedMessage objectForKey:@"ObjectID"]];
[self performSelector:@selector(delete:) withObject:[PedObjects objectForKey:[PedMessage objectForKey:@"ObjectID"]] afterDelay:2.0];


-(void)delete:(NSMutableDictionary*)dict
{
    NSLog(@"%@",[PedMessage objectForKey:@"ObjectID"]);
    NSLog(@"%@",PedObjects);
    [PedObjects removeObjectForKey:[dict objectForKey:@"ObjectID"]];
    NSLog(@"%@",PedObjects);

}
4

1 に答える 1

5

次のようなものを使用できます。

タイマーの代わりに、

[self performSelector:@selector(delete:) withObject:yourDictionary afterDelay:2.0];

//delete implementation

-(void)delete:(NSMutableDictionary*)dict {
    [dict removeObjectForKey:@"yourKey"];
}
于 2012-12-08T16:18:01.613 に答える