2010-12-06 37 views
0

我有一个的NSSet对象,我想在一个performSelector -call经过:performSelector不会通过对象到选择

NSSet *myNSSetObject = [self getSet]; 

if (myNSSetObject.count != 1) 
    return; 

[self performSelector:@selector(myMethod:) withObject:myNSSetObject afterDelay:0.5]; 

的问题是,在对象到达myMethod空。由于performSelector保留传递的对象,我不明白发生了什么问题。

我的方法是定义如下

- (void)myMethod:(NSSet *)myNSSetParam { 
    NSLog(@"Set count: %d", myNSSetParam.count); 
    [do sth]; 
} 

的的NSLog显示: 集数:0


展望深入到此事,并已经通过上述计数建议的,NSSet中的对象是实际上已经过去了,但却失去了记录。

是不是NSSet保留其对象?

回答

1

你肯定getSet返回实际NSSet,而不是一个可变的子类的NSSet “基指针”下隐藏?如果它是可变的,则可以在0.5秒延迟内对该组进行修改。即使performSelector:withObject:afterDelay:保留了该设置,它也不会阻止它被修改。

2

myMethod实际上是否有参数?需要注意Objective-C中的方法名称和选择符实际上包含了声明中存在的冒号;因此,像这样的方法:

- (void)myMethod:(NSSet *)set; 

必须引用@selector(myMethod:),包括尾随冒号。

+0

是的。我更新了问题以显示电话,谢谢。 – iFloh 2010-12-06 09:52:00

0

你应该叫

[self performSelector:@selector(myMethod:) withObject:myNSSetObject afterDelay:0.5]; 

代替(注意消息名称后面的冒号)。

+0

与上面相同,是一个错字(更新),谢谢 – iFloh 2010-12-06 09:51:15

0

您的意思是

[self performSelector:@selector(myMethod:) withObject:myNSSetObject afterDelay:0.5] 

假设myMethod:是需要的对象的方法?

+0

是的,我做了...错字,只是更新...谢谢 – iFloh 2010-12-06 09:45:40

2

从第一条消息返回(或部分位于发布代码片段之下)后,您是否意外地更改[self getSet]提供的NSSet?如果您之后从集合中删除对象,myMethod:将无法​​再访问它。